2010-02-02 17 views
21

Gibt es eine Möglichkeit, einem Benutzersteuerelement benutzerdefinierte Ereignisse zu geben und das Ereignis für ein Ereignis innerhalb des Benutzersteuerelements aufzurufen. (Ich bin nicht sicher, ob invoke ist die korrekte Bezeichnung)Winforms-Benutzer steuert benutzerdefinierte Ereignisse

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


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

Und die 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

Sie könnten diese erste Antwort auf diese Frage nützlich http://stackoverflow.com/questions/2151049/net-custom-event-organization-assistance –

Antwort

29

Abgesehen von der e Beispiel, dass Steve gepostet hat, gibt es auch Syntax zur Verfügung, die das Ereignis einfach passieren kann. Es ist ähnlich wie eine Eigenschaft zu erstellen:

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

Ich glaube, was Sie wollen so etwas wie dieses:

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

Und dann auf Ihrem Formular:

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 hilfreich Antwort – Kevin

+0

Ehrfürchtig. Hat den Trick sofort gemacht, ohne herumzufummeln. :) – Almo

Verwandte Themen