2010-02-02 1 views
21

Esiste un modo per fornire un evento personalizzato di Controllo utente e richiamare l'evento su un evento all'interno del controllo utente. (Non sono sicuro se invoke è il termine corretto)Winforms controlla gli eventi personalizzati

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


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

E il 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

si potrebbe trovare questa prima risposta a questa domanda utile http://stackoverflow.com/questions/2151049/net-custom-event-organization-assistance –

risposta

29

Oltre alla e xample che Steve ha pubblicato, c'è anche la sintassi disponibile che può semplicemente passare l'evento. E 'simile alla creazione di una proprietà:

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

Credo che ciò che si vuole è qualcosa di simile:

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); 
    } 
} 

E poi sul modulo:

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 utile risposta – Kevin

+0

Impressionante. Ha fatto subito il trucco senza dire niente. :) – Almo