2011-10-24 15 views
49

Tengo un usercontrol personalizado y quiero hacer algo relativamente simple.¿Cómo realizo un evento en el control de usuario y lo guardo en el formulario principal?

Cuando cambia un valor numérico en el valor de ese control de usuario, haga que el formulario principal actualice una ventana de visualización.

Esto no es un problema si el NUD no estaba en un control de usuario, pero parece que no puedo encontrar la manera de controlar el evento mediante el formulario principal y no el control de usuario.

+1

posible duplicado de [Winforms usuario controla los eventos personalizados] (http://stackoverflow.com/questions/2188059/winforms-user-controls-custom-events) –

Respuesta

100

Debe crear un controlador de eventos para el control de usuario que se genera cuando se activa un evento desde el control del usuario. Esto le permitirá incluir el evento en la cadena para que pueda manejar el evento desde el formulario.

Al hacer clic en el control de usuario Button1, dispararé Button1_Click que desencadena UserControl_ButtonClick en el formulario: control de

usuario:

public event EventHandler ButtonClick; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //bubble the event up to the parent 
    if (this.ButtonClick!= null) 
     this.ButtonClick(this, e);    
} 

Forma:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick); 

protected void UserControl_ButtonClick(object sender, EventArgs e) 
{ 
    //handle the event 
} 
+3

No puedo hacer la edición, pero ¿cambiarías '' UserControl1.OnButtonClick'' a '' UserControl1.ButtonClick''? –

+0

muy útil, thaks –

+1

edite el código del formulario: 'ButtonClick' en lugar de' OnButtonClick' – ThunderWiring

15

se puede intentar la misma. Trate de colocar este código en tu UserControl:

public event EventHandler ValueChanged { 
    add { numericUpDown1.ValueChanged += value; } 
    remove { numericUpDown1.ValueChanged -= value; } 
} 

entonces su UserControl tendrá el evento ValueChanged está acostumbrado a ver con el control NumericUpDown.

+1

No use la palabra clave * new * aquí. –

10

se puede hacer como esto ..... El siguiente ejemplo muestra cuadro de texto Valor (control de usuario) cambió

// Declare a delegate 
public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e); 
public partial class SampleUserControl : TextBox 
{  
    public SampleUserControl() 
    { 
     InitializeComponent(); 
    } 

    // Declare an event 
    public event ValueChangedEventHandler ValueChanged; 

    protected virtual void OnValueChanged(ValueChangedEventArgs e) 
    { 
     if (ValueChanged != null) 
      ValueChanged(this,e); 
    }  
    private void SampleUserControl_TextChanged(object sender, EventArgs e) 
    { 
     TextBox tb = (TextBox)sender; 
     int value; 
     if (!int.TryParse(tb.Text, out value)) 
      value = 0; 
     // Raise the event 
     OnValueChanged(new ValueChangedEventArgs(value)); 
    }  
} 
Cuestiones relacionadas