C#如果按钮IsEnabled,点击

时间:2016-07-22 10:57:37

标签: c# wpf button

我有下一期,我正在研究小型c#-wpf应用程序, 并且在加载时我正在禁用按钮,该按钮用于对点击执行某些操作,它看起来像这样:

public MainWindow()
{
    InitializeComponent();

    this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

    if (String.IsNullOrEmpty(password.Password))
    {
        btnActivate.IsEnabled=false;
    }
}

在某处我正在检查我的密码字段,例如:

private void password_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter))
    {
        if (password.Password == "drag0n")
        {
            btnActivate.IsEnabled = true;
        }
        else
        {
            btnActivate.IsEnabled = false;
        }
    }
}

接下来我的问题是,当用户输入"drag0n"然后按回车键时,按钮应该只启用,但不仅启用了,它的调用自动成为他的事件_Click,我不会知道为什么会发生这种情况,因为在这种情况下,如果我的按钮刚启用,也会调用事件_Click,如果用户点击该按钮,则再次调用事件,所以实际上我的事件onclick是两次打电话。

我的问题是,如果设置IsEnabled=true,如何停止调用我的Click事件。当我设置IsEnabled=true时,我只是希望启用此按钮,而我不想执行事件_Click。 我只想在按下按钮时执行事件_Click,因为它应该工作而不是IsEnabled=true

谢谢你们, 干杯

1 个答案:

答案 0 :(得分:3)

按Enter键时发生单击事件,因为此按钮是表单中的默认控件。

如果您不想在Enter键上单击事件,则应该使此按钮不是默认值或不处理按下按钮时按Enter键(e.Handled = true - >按下Enter键时)。

或尝试更改您的代码:

private void password_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter))
    {
        if (password.Password == "drag0n")
        {
            e.Handled = true; // add this line
            btnActivate.IsEnabled = true;
        }
        else
        {
            btnActivate.IsEnabled = false;
        }
    }
}