2010-02-02 13 views
21

Hay una manera de dar un control de usuario eventos personalizados e invocar el evento en un evento dentro del control de usuario. (No estoy seguro de si invocación es el término correcto)Winforms controles de usuario eventos personalizados

public partial class Sample: UserControl 
{ 
    public Sample() 
    { 
     InitializeComponent(); 
    } 


    private void TextBox_Validated(object sender, EventArgs e) 
    { 
     // invoke UserControl event here 
    } 
} 

Y el MainForm:

public partial class MainForm : Form 
{ 
    private Sample sampleUserControl = new Sample(); 

    public MainForm() 
    { 
     this.InitializeComponent(); 
     sampleUserControl.Click += new EventHandler(this.CustomEvent_Handler); 
    } 
    private void CustomEvent_Handler(object sender, EventArgs e) 
    { 
     // do stuff 
    } 
} 
+0

Usted puede encontrar esta primera respuesta a esta pregunta útil http://stackoverflow.com/questions/2151049/net-custom-event-organization-assistance –

Respuesta

29

Aparte de la e Por ejemplo, Steve publicó, también hay sintaxis disponible que simplemente puede pasar el evento. Es similar a la creación de una propiedad:

class MyUserControl : UserControl 
{ 
    public event EventHandler TextBoxValidated 
    { 
     add { textBox1.Validated += value; } 
     remove { textBox1.Validated -= value; } 
    } 
} 
27

Creo que lo que quiere es algo como esto:

public partial class Sample: UserControl 
{ 
    public event EventHandler TextboxValidated; 

    public Sample() 
    { 
     InitializeComponent(); 
    } 


    private void TextBox_Validated(object sender, EventArgs e) 
    { 
     // invoke UserControl event here 
     if (this.TextboxValidated != null) this.TextboxValidated(sender, e); 
    } 
} 

Y luego en su formulario:

public partial class MainForm : Form 
{ 
    private Sample sampleUserControl = new Sample(); 

    public MainForm() 
    { 
     this.InitializeComponent(); 
     sampleUserControl.TextboxValidated += new EventHandler(this.CustomEvent_Handler); 
    } 
    private void CustomEvent_Handler(object sender, EventArgs e) 
    { 
     // do stuff 
    } 
} 
+0

1 útil respuesta – Kevin

+0

Impresionante. Hizo el truco de inmediato sin ningún tipo de molestia. :) – Almo

Cuestiones relacionadas