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

时间:2011-05-01 03:03:09

标签: c# winforms mouse-pointer

我有一个mdichild和一个用于拖放的事件处理程序,所以当我在我的表单中删除一个图像文件时,会使用该图像创建一个picturebox(name = dpic)。

我有另一个用于dpic_Click的事件处理程序,所以当我点击图像时,我的表单文本就是该图像的名称。

第一次放下图像后,会创建另一个dpic,因为你不能有两个同名的cotrol。 C#自动更改名称,这使我的事件处理程序仅适用于我放入的最后一个图像。我想如果我可以为我的mdichild创建一个事件处理程序,它获取鼠标指针下的控件名称,我可以简单地更改回到我指着的图像。

更新

这是我的代码,我为我的mdichild做了一个事件处理程序:

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);
            } 
// ________________________________________________________________________
        } 
    }

2 个答案:

答案 0 :(得分:0)

您要找的是发件人。发件人将告知点击了哪个图像,并允许您获取其名称。

PictureBox picSender = (PictureBox)sender;
label1.Text = picSender.Name;

编辑:你把它放在pic_Click事件

答案 1 :(得分:0)

我不明白你想在这里做什么,可能在表格上分层新图片框?

如果是这样,你可以使用

 List<PictureBox> picboxes = new List<PictureBox>();

你在哪里:

 dpic = new PictureBox() ;

更改为

PictureBox dpic = new PictureBox() ;
 picboxes.Add(dpic);
 this.Controls.Add(dpic);

但请注意,您无法宣布无限制的控制。