我有一个小型项目,其中我想要几个按钮在Clicked或Ctrl + Clicked时表现不同。为实现这一点,每个按钮都有这种功能附加到他们的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 + Clicking按此功能运行。我的问题是,当使用Enter键激活我的按钮时,此行为不适用:单独输入键会触发"正常"行为但Ctrl + Enter不执行任何操作(按钮未激活)。
当按下Escape时,我已经覆盖了ProcessDialogKey()函数来关闭窗口,所以我想我可以使用它来使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);
}
那就是我被困的地方。当然,这并没有做任何事情,但我真的不知道在我的第二个条件中键入什么才能使它发挥作用。
也许我使用了错误的做法?有人能指出我正确的方向吗?
答案 0 :(得分:0)
假设您放置了带有ID Label1的Label和带有ID Button1的按钮,以下将执行:
if (e.KeyChar == '\n') Button1_Click(sender, new EventArgs());
到你的解决方案,只需将一个KeyPress事件添加到你的Button1并在keypress事件中应用以下代码Button1_KeyPress:
ServiceModule
答案 1 :(得分:0)
我找到了一个解决方案,可让您点击Enter或Ctrl + Enter:
<!DOCTYPE html>
<html>
<title> Happy number</title>
<head>
<script>
function fun(){
var input = document.myform.t1.value;
do{
var output = [];
var sNumber = input.toString();
var len = sNumber.length;
var sum = 0;
for (var i = 0; i < len; i++)
{
output.push(+sNumber.charAt(i));
}
var j;
var ret= [];
var outlen = output.length;
for (j = 0; j < outlen; j++)
{
ret.push(output[j] * output[j]);
}
var sum = ret.reduce(getSum);
input = sum;
}while(input >= 9);
if(input == 1)
{
document.getElementById("para1").innerHTML = (" given number is happynumber");
}
else
{
document.getElementById("para1").innerHTML = ("not happy number");
}
}
function getSum(total, num) {
return total + num;}
</script>
</head>
<body>
<center>
<form name="myform" method="post" onsubmit="fun(); return false;">
<table border="1">
<tr>
<th colspan="2"> Happy Number </th>
</tr>
<tr>
<th> input number : </th>
<td> <input type="text" name="t1" id="text1" pattern="[0-9]{2,}" title="only numbers allowed" ></td>
</tr>
<tr>
<td colspan="2"> <center><button onclick="fun()">alert</button></center></td>
</tr>
<tr>
<td colspan="2"> <center> <p id="para1" style="color:red;"> </p> </center></td>
</tr>
</table>
</form>
</center>
</body>
</html>
答案 2 :(得分:-1)
好的,所以我终于通过将其添加到我的重写ProcessDialogKey()方法中找到了一个有效的解决方案:
if (keyData == (Keys.Enter | Keys.Control))
{
(this.ActiveControl as Button).PerformClick();
}
我不知道它是否符合&#34;清洁&#34;代码,但它具有满足我的2个要求的优点:将Ctrl + Enter函数设置为Ctrl + Click,而不必为每个Button声明2个方法。