Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: kaiserdj en 7 Febrero 2018, 22:22 pm



Título: Problema con los user control
Publicado por: kaiserdj en 7 Febrero 2018, 22:22 pm
Buenos días,
Soy nuevo en c# y visual studio,
lo que quiero hacer es que en el form1 muestre un user control, y cuando le de a un boton dentro ese user control, haga .BringToFront(); de otro user control dentro del form1, no se si me entiendes.

Por ejemplo:
tengo en el form1 el user control "servers",
al dar a un boton que esta dentro de "servers"
ejecute "noticias1.BringToFront();"
para que el user control "noticias1"
se ponga encima de todo en el form1

Lo siento si es lioso, muchas gracias y un saludo


Título: Re: Problema con los user control
Publicado por: Eleкtro en 7 Febrero 2018, 23:10 pm
lo que quiero hacer es que en el form1 muestre un user control, y cuando le de a un boton dentro ese user control, haga .BringToFront(); de otro user control dentro del form1, no se si me entiendes.

1. ¿Qué has intentado hacer para solucionarlo?, muestra el código... en el foro no se pide ni se hacen tareas.

2. ¿Qué es exactamente en lo que tienes dificultades con ese problema?.

De todas formas te explico, basicamente lo único que tienes que hacer es controlar el evento Button.Click del botón hijo de tu user control, y ahí invocas un evento base, es decir, un evento existente en la clase de tu user control.

Por si no lo has entendido bien, lo explicaré de otra forma: en la clase de tu user control, lo primero de todo debes declarar y exponer un evento llamado 'Click' (o como lo quieras llamar, eso no importa), luego hace falta que añadas un método llamado 'OnClick' que servirá para invocar el evento 'Click'. Ya tienes creado el evento y el invocador del evento, bien, ahora, debes añadir otro método para controlar el evento 'Button.Click' del botón hijo, y en el bloque de código de ese controlador del evento 'Button.Click' debes invocar el evento 'Click' base, es decir, el evento que declaraste en tu user control, llamando al invocador del evento (el método 'OnClick').

Si estás heredando la clase UserControl o cualquier otra clase que herede de la clase Control (como sería lógico suponer que estás haciendo), entonces puedes saltarte unos cuantos pasos, puesto que dicha clase ya expone un evento llamado Click que lo heredas y del cual podemos servirnos de la siguiente manera:

Código
  1. [DefaultEvent("Click")]
  2. public class MyUserControl : UserControl {
  3.  
  4.    protected Button ChildButton;
  5.  
  6.    public MyUserControl() {
  7.        this.ChildButton = new Button();
  8.        this.ChildButton.Click += this.ChildButton_Click;
  9.        this.Controls.Add(this.ChildButton);
  10.    }
  11.  
  12.    private void ChildButton_Click(object sender, EventArgs e) {
  13.        base.OnClick(e);
  14.    }
  15.  
  16. }

Te muestro la forma que expliqué de hacerlo al principio, es decir, creando un nuevo evento:

Código
  1. [DefaultEvent("ClickButton")]
  2. public class MyUserControl : UserControl {
  3.  
  4.    protected Button ChildButton;
  5.    public event EventHandler<EventArgs> ClickButton;
  6.  
  7.    public MyUserControl() {
  8.        this.ChildButton = new Button();
  9.        this.ChildButton.Click += this.ChildButton_Click;
  10.        this.Controls.Add(this.ChildButton);
  11.    }
  12.  
  13.    protected virtual void OnClickButton(EventArgs e) {
  14.        if (this.ClickButton != null) {
  15.            this.ClickButton(this, e);
  16.        }
  17.    }
  18.  
  19.    private void ChildButton_Click(object sender, EventArgs e) {
  20.        this.OnClickButton(e);
  21.    }
  22.  
  23. }

Ese último ejemplo serviría para diferenciar un tipo de click de otro, es decir, diferenciar un click en la superficie del user control (controlando el evento MyUserControl.Click), de un click en el botón (controlando el evento MyUserControl.ClickButton).

Saludos