如何获取鼠标指针下控件的名称(无需为每个控件创建事件处理程序)
本文关键字:控件 程序 创建 事件处理 获取 何获取 鼠标指针 | 更新日期: 2023-09-27 17:53:54
我有一个midchild,以及一个用于拖放的eventandler,所以当我在表单中拖放图像文件时,会用该图像创建一个picturebox (name = dpic)。
我有另一个事件处理程序是dpic_Click,所以当我点击图像时,我的表单文本是该图像的名称
在我第一次放置一个图像之后,另一个ppic被创建,因为您不能有两个具有相同名称的控件。c#会自动更改名称,这使得我的事件处理程序只适用于我放入的最后一个图像。我想,如果我可以为我的midchild创建一个事件处理程序,它可以获取鼠标指针下控件的名称,我可以简单地更改回我所指向的图像。
这是我的代码,我做了一个事件处理程序在我的孩子:
void mdiChild_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
dpic = new PictureBox() ;
string[] filepath = (string[])e.Data.GetData(DataFormats.FileDrop);
Image image = Image.FromFile(filepath[0]);
dpic.Image = image;
dpic.Tag = Path.GetFileName(filepath[0]);
this.ActiveMdiChild.Controls.Add(dpic);
dpic.ContextMenuStrip = this.contextMenuStrip1;
this.ActiveMdiChild.Refresh();
dpic.BringToFront();
this.ActiveMdiChild.ActiveControl = dpic;
dpic.Click += new EventHandler(dpic_Click);
// _____this helped me do it_________________________________________________
foreach (Control c in this.ActiveMdiChild.Controls)
{
c.Click += new EventHandler(c_Click);
}
// ________________________________________________________________________
}
}
你要找的是一个发送者。发送者会告诉你哪个图片被点击了,并允许你得到它的名字。
PictureBox picSender = (PictureBox)sender;
label1.Text = picSender.Name;
编辑:你把它放在pic_Click事件中
我不明白你到底想做什么在这里,可能分层新的图片盒与丢弃的图像上的形式?
如果是这样的话,你可以使用
List<PictureBox> picboxes = new List<PictureBox>();
和你在哪里做:
dpic = new PictureBox() ;
改变
PictureBox dpic = new PictureBox() ;
picboxes.Add(dpic);
this.Controls.Add(dpic);