如何获取鼠标指针下控件的名称(无需为每个控件创建事件处理程序)

本文关键字:控件 程序 创建 事件处理 获取 何获取 鼠标指针 | 更新日期: 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);