Comment obtenir le nom d'un contrôle sous le pointeur de la souris (sans un gestionnaire d'événements pour chaque contrôle)?
-
27-10-2019 - |
Question
J'ai un MDIChild, et un gestionnaire d'événements pour DragAndDrop quand je laisse tomber un fichier d'image dans ma forme, un picturebox (name = DPIC) est créé avec cette image.
J'ai une autre eventhandler qui est pour dpic_Click, quand je clique sur l'image, le texte de ma forme est le nom de cette image.
Après la première fois que je laisse tomber une image, une autre DPIC est créé, parce que vous ne pouvez pas avoir deux cotrols avec le même nom. C # change automatiquement le nom et qui fait mes gestionnaires d'événements que les travaux pour la dernière image je suis passé. Je pense que si je pouvais faire un gestionnaire d'événements pour mon MDIChild qui obtient le nom du contrôle qui est sous le pointeur de la souris que je pouvais tout simplement le changement sauvegarder l'image que je me montre du doigt.
UPDATE
Voici mon code, je fait un gestionnaire d'événements pour droping dans mon 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);
}
// ________________________________________________________________________
}
}
La solution
Ce que vous cherchez est un expéditeur. L'expéditeur indiquera quelle image vous avez cliqué et vous permettra d'obtenir son nom.
PictureBox picSender = (PictureBox)sender;
label1.Text = picSender.Name;
EDIT: Vous mettez que dans le cas pic_Click
Autres conseils
Je ne comprends pas exactement ce que vous voulez faire ici, peut-être la superposition de nouvelles PictureBoxes des images glissées sur la forme?
Si tel est que vous pouvez utiliser un
List<PictureBox> picboxes = new List<PictureBox>();
et où vous faites:
dpic = new PictureBox() ;
changement
PictureBox dpic = new PictureBox() ;
picboxes.Add(dpic);
this.Controls.Add(dpic);
Mais veuillez noter que vous ne pouvez pas avoir des contrôles illimités déclarés.