Forums Últimos mensajes - Powered by IBM
 

Ayuda con panel y labels

24/10/2005 - 02:52 por Jordi Lopez | Informe spam
Tengo el siguiente problema:

He creado varios label's, que lo he añadido a un panel
(panel1.Controls.Add(label1).

Me gustaria poder seleccionar cada label, y al hacer click con el boton
derecho poder eliminarlos. El problema es que no se como hacer que se
seleccionen.

Les he asignado un contextMenu, pero no puedo saber cual es el que esta
seleccionado.

Espero que me ayudeis.

Gracias.

Jordi López
 

Leer las respuestas

#1 Miguel Angel Campos
24/10/2005 - 09:34 | Informe spam
Hola Jordi,

El problema que tienes lo puedes resolver de dos formas distintas,
dependiendo de la funcionalidad que quieras implementar:
1) La primera forma es creando un control, derivado de Label, que implemente
la funcionalidad de detectar si está pulsado o no, y pintarse de distinta
forma en función de ello. Lo puedes hacer sobrescribiendo los método
OnPaint, OnMouseDown, y OnMouseUp (Al final te pongo un ejemplo)
2) La segunda forma es que el mismo Form o Panel sea el encargado de
realizar toda la lógica, subcribiendote a los eventos Paint, MouseDown y
MouseUp de cada uno de los Label.

El primer método tiene la ventaja de la encapsulación, ya que crearías un
nuevo control que contiene toda la lógica necesaria para los objetivos que
quieres.
El segundo método sirve para desarrollar un editor en toda regla, con este
método podrás implementar selección multiple de controles, ofrecer mas
funcionalidad en el menú contextual si tienes mas de un control
seleccionado, etc. Ademas de que te serviría para cualquier control que
tuvieras incluido en el formaulario o panel.

Aquí te adjunto el código necesario para la primera alternativa, es muy
simple, sólo coloca un rectangulo alrededor del control Label:

public class LabelSelected : Label
{
private bool _selected;
public LabelSelected()
{
_selected = false;
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (_selected)
{
Rectangle rec;
rec = this.ClientRectangle;
e.Graphics.DrawRectangle(new Pen(Color.Black), rec);
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
_selected = true;
this.Invalidate();
}
protected override void OnMouseUp(MouseEventArgs e)
{
_selected = false;
base.OnMouseUp(e);
this.Invalidate();
}
}
Un Saludo,

Miguel Angel Campos
MCAD.NET

"Jordi Lopez" escribió en el mensaje
news:ZeW6f.101373$
Tengo el siguiente problema:

He creado varios label's, que lo he añadido a un panel
(panel1.Controls.Add(label1).

Me gustaria poder seleccionar cada label, y al hacer click con el boton
derecho poder eliminarlos. El problema es que no se como hacer que se
seleccionen.

Les he asignado un contextMenu, pero no puedo saber cual es el que esta
seleccionado.

Espero que me ayudeis.

Gracias.

Jordi López

Preguntas similares