Wie bekomme ich den Namen einer Steuerung unter dem Mauszeiger (ohne für jede Kontrolle einen Ereignishandler zu erstellen)?

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

  •  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);
            } 
// ________________________________________________________________________
        } 
    }
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top