2017-03-03 85 views
-1

我有一个问题。添加事件mouseDown和mouseMove到我自己的类

我需要添加一个MouseDown事件到我自己的类(Unidad.cs),但我不知道该怎么做。我有一个扩展从pictureBox的类,我需要一个MouseDown和MouseMove事件来移动pictureBox,我该怎么做?而且...它始终是确切的pictureBox?我的意思是,我将有20个(例如)“Unidad”对象,并且我只想移动用鼠标单击的Unidad对象。

我的类:

public class Unidad : PictureBox 
{ 
    //Constructor 
    public Unidad(string nombre, string tipo, int movimiento, int ha, int hp, int fuerza, int resistencia, int heridas, int iniciativa, int ataques, int liderazgo, int coste, string rutaImagen) 
    { 
     tipoUnidad = tipo; 
     movimientoUnidad = movimiento; 
     nombreUnidad = nombre; 
     costeUnidad = coste; 
     haUnidad = ha; 
     hpUnidad = hp; 
     fuerzaUnidad = fuerza; 
     resistenciaUnidad = resistencia; 
     iniciativaUnidad = iniciativa; 
     ataquesUnidad = ataques; 
     liderazgoUnidad = liderazgo; 

     object O = Resources.ResourceManager.GetObject(rutaImagen); 
     dibujoUnidad = new PictureBox(); 
     dibujoUnidad.SizeMode = PictureBoxSizeMode.StretchImage; 
     dibujoUnidad.ClientSize = new Size(145, 67); 
     dibujoUnidad.Image = (Image)O; 
    } 

    //Propiedades 
    public string nombreUnidad { get; set; } 
    public string tipoUnidad { get; set; } 
    public int movimientoUnidad { get; set; } 
    public int costeUnidad { get; set; } 
    public int haUnidad { get; set; } 
    public int hpUnidad { get; set; } 
    public int fuerzaUnidad { get; set; } 
    public int resistenciaUnidad { get; set; } 
    public int heridasUnidad { get; set; } 
    public int iniciativaUnidad { get; set; } 
    public int ataquesUnidad { get; set; } 
    public int liderazgoUnidad { get; set; } 
    public PictureBox dibujoUnidad { get; set; } 

    //Método para dibujar unidad 
    public void Colocar(Point p, Control control, Image imagen) 
    { 
     using (Graphics g = control.CreateGraphics()) 
     { 
      using (Pen pen = new Pen(Color.Red, 2)) 
      { 
       g.DrawImage(imagen, p); 
      } 
     } 
    } 
} 

谢谢!

编辑1:

我可以在我的“Unidad.cs”结束与做:

public void Colocar(Control control, Unidad unidad, Point p)//(Point p, Control control, Image imagen) 
    { 
       control.Controls.Add(unidad); 
    } 

    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     //Do Stuff here 
     base.OnMouseDown(e); 
     MessageBox.Show("HOLA"); 
    } 

,我现在的问题是,我没有图像,如果我不使用BackColor命令,我看到一个黑色矩形或灰色矩形,当我点击它时,它会显示一个MessageBox,但我无法放置正确的图像或正确的位置。任何人都可以帮助我?

+0

您是否得到了这个工作? – Wheels73

回答

0

您是从PictureBox的继承,因此您可以覆盖鼠标事件

public class Unidad : PictureBox 
    { 
     protected override void OnMouseDown(MouseEventArgs e) 
     { 
      //Do Stuff here 
      base.OnMouseDown(e); 
     } 
    } 

我添加了一个小组到我的形式,“Form1的”叫“picContainer”

public Form1() 
{ 
     InitializeComponent(); 

     picContainer.Controls.Add(new MyPictureClass() 
     { 
      Image = imageList1.Images[0], 
     } 
    ); 
} 

我从设置图像图像容器。

+0

你的权利,我没有看到来自PictureBox的派生。 – Sammy

+0

我尝试,但它不起作用。我将你的代码复制到我的类中,然后放入一个MessageBox.Show(“OK”);之后你base.OnMouseDown但它不显示消息框。你能帮我多一点吗?谢谢! – Imrik

+0

我把一个断点,它不输入​​的方法。 – Imrik

0

首先,您需要创建一个将成为事件处理程序的方法。它应该是这样的:

dibujoUnidad.MouseDown.MouseDown += new MouseEventHandler(mouseDownEvent_method); 

希望它有帮助!

+0

然后呢?我需要做什么?谢谢! :) – Imrik

0

试试这个:

public class Unidad { 
    public event EventHandler MouseDown; 

    public void someMethode() 
    { 
     // Raise the event 
     OnMouseDown(EventArgs.Empty); 
    } 

    protected void OnMouseDown(EventArgs e) 
    { 
     if (MouseDown != null) 
      MouseDown(this, e); 
    } 
} 

你必须做相同的MouseUp

您也可以使用自己的EventArgs对象。 不要拿去,使用该行: public event EventHandler<MyEventArgs> MouseDown

确保您MyEventArgs类是从EventArgs的派生。

+0

我不明白它是如何工作的。我的意思是,我必须调用someMethode()?什么时候? – Imrik

相关问题