连续检查来自usercontrol的按钮是否已单击

时间:2016-03-12 20:25:18

标签: c# winforms events user-controls event-handling

我有一个类名为PinPad的用户控件。它包含我处理其点击事件Button的{​​{1}}和用于阅读btnGetAccess_Click(object sender, EventArgs e)中输入的Password的属性。

我在TextBox上放置了PinPad控件的实例,当点击按钮并且密码正确时,它应该打开Form1

因为我把它放在构造函数中,目前检查密码什么都不做,因为它只会在加载Form2时检查密码,而且还没有输入密码。

那么如何在点击用户控件类中的按钮后让Form1连续检查密码?

这是我目前的代码:

Form1

2 个答案:

答案 0 :(得分:3)

您不需要连续检查按钮点击。创建事件以订阅它们。然后他们会在举办活动时通知您。

您应该在用户控件中创建一个新事件,并在例如用户控件中的按钮单击时将其抬起。然后,您可以在表单中订阅该事件并在那里运行您的逻辑。

示例:

[System.ComponentModel.DefaultEvent("ButtonClicked")]
public partial class SampleControl: UserControl
{
    public SampleControl()
    {
        InitializeComponent();
        button1.Click += button1_Click;
    }

    public event EventHandler ButtonClicked;
    protected virtual void OnButtonClicked(EventArgs e)
    {
        var handler = ButtonClicked;
        if (handler != null)
            handler(this, e);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        //Do Stuff then raise event
        OnButtonClicked(EventArgs.Empty);
    }
}

您可以将控件放在表单上并处理其ButtonClicked事件。由于我们将ButtonClicked设置为控件的默认事件,因此当您在设计器中双击它时,它会创建事件处理程序并订阅事件:

private void sampleControl1_ButtonClicked(object sender, EventArgs e)
{
    MessageBox.Show("Button Clicked");
}

作为C#开发人员,您应该了解事件,就像了解类,方法,属性等一样。您可以了解有关Handling and Raising Events的更多信息。

答案 1 :(得分:-2)

使用Timer。这是一个很好的例子。实施它,并且在正确输入和检查密码后不要忘记停止计时器。