Comment obtenir le nom d'un contrôle sous le pointeur de la souris (sans un gestionnaire d'événements pour chaque contrôle)?

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

  •  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);
            } 
// ________________________________________________________________________
        } 
    }
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top