简体   繁体   中英

Eventhandler does not fire when user control's button is clicked

I have a button from a user control and want it to notify my form when it is clicked. Here is how I do it. It does not work. Can someone tell me what is wrong with it?

In user Control

    public event EventHandler clicked;
    public string items;
    InitializedData data = new InitializedData();
    ArrayList list = new ArrayList();
    public DataInput()
    {
        InitializeComponent();
        clicked+= new EventHandler(Add_Click);

    }


    public void Add_Click(object sender, EventArgs e)
    {
        items = textBox1.Text.PadRight(15) + textBox2.Text.PadRight(15) + textBox3.Text.PadRight(15);

        if (clicked != null)
        {
            clicked(this, e);
        }
    }

In Form1

    UserControl dataInput= new UserControl();
    public void OnChanged(){
        dataInput.clicked += Notify;
        MessageBox.Show("testing");
    }

    public void Notify(Object sender, EventArgs e)
    {
        MessageBox.Show("FIRE");
    }

Thanks

The UserControls Button Click event should be assigned to Add_Click , I don't think you want to assign the UserControl clicked event to Add_Click

Try removing clicked += new EventHandler(Add_Click); from your UserControl and set the UserControls Button Click event to Add_Click so it will trigger clicked on you Form

Example:

UserControl:

public partial class UserControl1 : UserControl
{
    public event EventHandler clicked;

    public UserControl1()
    {
        InitializeComponent();

        // your button
        this.button1.Click += new System.EventHandler(this.Add_Click);
    }

    public void Add_Click(object sender, EventArgs e)
    {
        if (clicked != null)
        {
           // This will fire the click event to anyone listening
            clicked(this, e);
        }
    }
}

Form:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // your usercontrol
        userControl11.clicked += userControl11_clicked;
    }

    void userControl11_clicked(object sender, EventArgs e)
    {

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM