¿Cómo obtener el nombre de un control debajo del puntero del mouse (sin hacer un controlador de eventos para cada control)?

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

  •  27-10-2019
  •  | 
  •  

Pregunta

Tengo un Mdichild, y un EventHandler para DragandDrop, por lo que cuando dejo caer un archivo de imagen en mi formulario, se crea un cuadro de imagen (name = DPIC) con esa imagen.

Tengo otro EventHandler que es para DPIC_CLICK, así que cuando hago clic en la imagen, el texto de mi formulario es el nombre de esa imagen.

Después de la primera vez que dejo caer una imagen, se crea otro DPIC, porque no puede tener dos cotrols con el mismo nombre. C# cambia automáticamente el nombre y eso hace que mis controladores de eventos solo funcionen para la última imagen en la que dejé caer. Creo De vuelta la imagen a la que estoy apuntando.

ACTUALIZAR

Aquí está mi código, hice un controlador de eventos para lanzar en mi 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);
            } 
// ________________________________________________________________________
        } 
    }
¿Fue útil?

Solución

Lo que estás buscando es un remitente. El remitente dirá en qué imagen se hizo clic y le permitirá obtener su nombre.

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

EDITAR: lo pones en el evento PIC_CLICK

Otros consejos

No entiendo exactamente lo que quieres hacer aquí, posiblemente capas nuevas cajas de imágenes con imágenes caídas en el formulario.

Si eso es para que puedas usar un

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

y donde haces:

 dpic = new PictureBox() ;

cambiar a

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

Pero tenga en cuenta que no puede declararse controles ilimitados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top