Как получить имя управления под указателем мыши (не делая обработчик событий для каждого управления)?
-
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);
Но обратите внимание, что у вас не может быть объявлено неограниченное количество элементов управления.