簡體   English   中英

如何在鼠標指針下獲取控件的名稱(無需為每個控件創建事件處理程序)?

[英]How to get the name of a control under the mouse pointer ( without making an event handler for each control ) ?

我有一個 mdichild 和一個用於拖放的事件處理程序,因此當我在表單中放置一個圖像文件時,會使用該圖像創建一個圖片框 (name = dpic)。

我有另一個用於 dpic_Click 的事件處理程序,因此當我單擊圖像時,我的表單文本就是該圖像的名稱。

在我第一次放置圖像后,會創建另一個 dpic,因為您不能有兩個具有相同名稱的控件。 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);
            } 
// ________________________________________________________________________
        } 
    }

您正在尋找的是發件人。 發件人將告訴您單擊了哪個圖像,並允許您獲取其名稱。

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);

但請注意,您不能聲明無限制的控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM