Come ottenere il nome di un controllo sotto il puntatore del mouse (senza fare un gestore di eventi per ogni controllo)?

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

  •  27-10-2019
  •  | 
  •  

Domanda

Ho un mdichild e un eventHandler per DragandDrop, quindi quando abbandone un file di immagine nel mio modulo, viene creata una foto (name = dpic) con quell'immagine.

Ho un altro eventHandler che è per DPIC_Click, quindi quando faccio clic sull'immagine, il testo del mio modulo è il nome di quell'immagine.

Dopo la prima volta che lancio un'immagine, viene creato un altro DPIC, perché non puoi avere due Cotrol con lo stesso nome. C# cambia automaticamente il nome e questo fa funzionare i miei gestori di eventi solo per l'ultima immagine in cui ho lasciato. indietro l'immagine a cui sto indicando.

AGGIORNARE

Ecco il mio codice, ho creato un gestore di eventi per cadere nel mio 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);
            } 
// ________________________________________________________________________
        } 
    }
È stato utile?

Soluzione

Quello che stai cercando è un mittente. Il mittente dirà quale immagine è stata cliccata e ti permetterà di ottenere il suo nome.

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

EDIT: lo metti nell'evento Pic_Click

Altri suggerimenti

Non capisco esattamente cosa vuoi fare qui, possibilmente stratificando nuovi caselle di immagini con immagini cadute sul modulo?

Se è così puoi usare un file

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

E dove fai:

 dpic = new PictureBox() ;

cambiare in

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

Ma si prega di notare che non è possibile disporre di controlli illimitati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top