将事件 mouseDown 和 mouseMove 添加到我自己的 class
Add event mouseDown and mouseMove to my own class
我有问题。
我需要将 MouseDown 事件添加到我自己的 class (Unidad.cs),但我不知道该怎么做。我有一个从 pictureBox 扩展而来的 class,我需要一个 MouseDown 和 MouseMove 事件来移动 pictureBox,我该怎么做?而且...它总是指向确切的 pictureBox?我的意思是,我将有 20 个(例如)"Unidad" 个对象,我只想移动用鼠标单击的 Unidad 对象。
我的class:
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,但我无法放置正确的图像或正确的位置。谁能帮帮我?
首先,您需要创建一个方法作为事件处理程序。应该是这样的:
dibujoUnidad.MouseDown.MouseDown += new MouseEventHandler(mouseDownEvent_method);
希望对您有所帮助!
试试这个:
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
class 来自 EventArgs。
您继承自 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],
}
);
}
我从图像容器中设置图像。
我有问题。
我需要将 MouseDown 事件添加到我自己的 class (Unidad.cs),但我不知道该怎么做。我有一个从 pictureBox 扩展而来的 class,我需要一个 MouseDown 和 MouseMove 事件来移动 pictureBox,我该怎么做?而且...它总是指向确切的 pictureBox?我的意思是,我将有 20 个(例如)"Unidad" 个对象,我只想移动用鼠标单击的 Unidad 对象。
我的class:
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,但我无法放置正确的图像或正确的位置。谁能帮帮我?
首先,您需要创建一个方法作为事件处理程序。应该是这样的:
dibujoUnidad.MouseDown.MouseDown += new MouseEventHandler(mouseDownEvent_method);
希望对您有所帮助!
试试这个:
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
class 来自 EventArgs。
您继承自 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],
}
);
}
我从图像容器中设置图像。