Winforms user controls custom events

25,482

Solution 1

Aside from the example that Steve posted, there is also syntax available which can simply pass the event through. It is similar to creating a property:

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

Solution 2

I believe what you want is something like this:

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

And then on your form:

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
    }
}
Share:
25,482

Related videos on Youtube

Kevin
Author by

Kevin

self-taught protege

Updated on July 09, 2022

Comments

  • Kevin
    Kevin almost 2 years

    Is there a way to give a User Control custom events, and invoke the event on a event within the user control. (I'm not sure if invoke is the correct term)

    public partial class Sample: UserControl
    {
        public Sample()
        {
            InitializeComponent();
        }
    
    
        private void TextBox_Validated(object sender, EventArgs e)
        {
            // invoke UserControl event here
        }
    }
    

    And the 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
        }
    }