将事件mouseDown和mouseMove添加到我自己的类中

时间:2017-03-03 09:14:51

标签: c# winforms events picturebox 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 ,但我不能把正确的图像或正确的位置。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

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

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

希望它有所帮助!

答案 1 :(得分: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。

答案 2 :(得分:0)

您继承自Picturebox,因此您可以覆盖鼠标事件

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

我在表单中添加了一个Panel,&#34; Form1&#34;叫&#34; picContainer&#34;

public Form1()
{
      InitializeComponent();  

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

我从图像容器中设置图像。