Как получить имя управления под указателем мыши (не делая обработчик событий для каждого управления)?

StackOverflow https://stackoverflow.com/questions/5846141

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть Mdichild и eventhandler для DragandDrop, поэтому, когда я бросаю файл изображения в мою форму, с этим изображением создается изображение (имя = dpic).

У меня есть еще один eventhandler, который предназначен для 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 с атрибуция
Не связан с StackOverflow
scroll top