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

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

У меня есть другой обработчик событий, предназначенный для dpic_Click, поэтому, когда я нажимаю на изображение, текст моей формы является именем этого изображения.

После того, как я впервые уронил изображение, создается еще один dpic, потому что у вас не может быть двух котролов с одинаковым именем. C # автоматически меняет имя, и это заставляет мои обработчики событий работать только для последнего изображения, которое я вставил. Я думаю, что если бы я мог сделать обработчик событий для моего mdichild, который получает имя элемента управления, который находится под указателем мыши, я мог бы просто изменить назад изображение, на которое я указываю.

UPDATE

Вот мой код, я сделал обработчик событий для добавления моего 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 голосов
/ 01 мая 2011

Я не совсем понимаю, что вы хотите сделать здесь, возможно, добавив новые ящики для фотографий с пропущенными изображениями в форме?

Если это так, вы можете использовать

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

и где вы делаете:

 dpic = new PictureBox() ;

изменить на

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

Но учтите, что вы не можете объявить неограниченный контроль.

0 голосов
/ 01 мая 2011

То, что вы ищете, это отправитель. Отправитель скажет, какое изображение было кликнуто, и позволит вам получить его имя.

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

РЕДАКТИРОВАТЬ: Вы помещаете это в событие pic_Click

...