【发布时间】:2017-08-13 09:27:38
【问题描述】:
我有一个小型项目,我希望几个按钮在单击或 Ctrl+单击时表现不同。为了实现这一点,这些按钮中的每一个都在其 Click() 事件中附加了这种功能:
private void Button1_Click(object sender, EventArgs e)
{
int value = 10 //default value
bool boool = false;
if (ModifierKeys == Keys.Control)
{
using (var form = new NUP_Popup(0, value, value, "maximum ?"))
{ //creates a simple window that allows user to change the value of 'value'
form.ShowDialog();
if (form.DialogResult == DialogResult.OK)
{
value = form.retVal;
boool = true;
}
else return;
}
}
//do stuff here, either with default or user value
}
现在,单击或 Ctrl+单击的行为与此功能的预期相同。我的问题是,当使用 Enter 键激活我的按钮时,此行为不适用:单独的 Enter 键会触发“正常”行为,但 Ctrl+Enter 什么也不做(按钮未激活)。
我已经重写了 ProcessDialogKey() 函数以在按下 Escape 时关闭窗口,所以我想我可以使用它来使 Enter 按键触发 Click() 事件函数:
protected override bool ProcessDialogKey(Keys keyData) //Allows quit when Esc is pressed
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
if (keyData == Keys.Return)
{
this.OnClick(new EventArgs());
}
return base.ProcessDialogKey(keyData);
}
这就是我卡住的地方。当然这并没有做任何事情,但我真的不知道在我的第二个条件中输入什么以使其工作。
也许我使用了错误的方法?有人能指出我正确的方向吗?
【问题讨论】:
-
第二个条件是什么意思?我会使用类似
KeyDown表单的事件来执行此操作。
标签: c# button onclick enter ctrl