Wie bekomme ich den Namen einer Steuerung unter dem Mauszeiger (ohne für jede Kontrolle einen Ereignishandler zu erstellen)?
-
27-10-2019 - |
Frage
Ich habe ein Mdichild und einen EventHandler für Draganddrop. Wenn ich also eine Bilddatei in meinem Formular fallen lasse, wird mit diesem Bild ein PictureBox (Name = DPIC) erstellt.
Ich habe einen anderen EventHandler, der für DPIC_CLICK ist. Wenn ich also auf das Bild klicke, ist der Text meines Formulars der Name dieses Bildes.
Nach dem ersten Mal, als ich ein Bild fallen lasse, wird ein weiterer DPIC erstellt, da Sie nicht zwei Cotrols mit demselben Namen haben können. C# ändert automatisch den Namen und das lässt meine Event -Handler nur für das letzte Bild funktionieren, in dem ich fallen gelassen wurde Zurück das Bild, auf das ich zeige.
AKTUALISIEREN
Hier ist mein Code, ich habe einen Event -Handler gemacht, um in meinem Mdichild fallen zu lassen:
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);
}
// ________________________________________________________________________
}
}
Lösung
Was Sie suchen, ist ein Absender. Der Absender zeigt an, auf welches Bild geklickt wurde, und ermöglicht es Ihnen, seinen Namen zu erhalten.
PictureBox picSender = (PictureBox)sender;
label1.Text = picSender.Name;
Bearbeiten: Sie haben das in das Event pic_click eingerichtet
Andere Tipps
Ich verstehe nicht genau, was Sie hier tun möchten, und schafft möglicherweise neue Bilderboxen mit abgesetzten Bildern auf dem Formular?
Wenn das so ist, dass Sie a verwenden können
List<PictureBox> picboxes = new List<PictureBox>();
und wo du tust:
dpic = new PictureBox() ;
ändern
PictureBox dpic = new PictureBox() ;
picboxes.Add(dpic);
this.Controls.Add(dpic);
Bitte beachten Sie jedoch, dass Sie keine unbegrenzten Kontrollen deklariert haben können.