我有下一个问题,我正在处理小型 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
上执行。
谢谢大家,干杯
当您按下 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;
}
}
}
我是一名优秀的程序员,十分优秀!