[英]C# custom ENTER key behaviour
我有一個小型項目,希望單擊或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
}
現在,Clicking或Ctrl + Clicking的行為符合此功能的預期。 我的問題是,使用Enter鍵激活按鈕時,此行為不適用:僅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);
}
那就是我被困住的地方。 當然,這什么也沒做,但是我真的不知道在第二種條件下鍵入什么才能起作用。
也許我使用了錯誤的方法? 有人可以指出正確的方向嗎?
假設您放置了一個ID為Label Label1的標簽和一個ID為Button1的按鈕,則將執行以下操作:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Button Clicked";
if (Control.ModifierKeys == Keys.Control) label1.Text += " with Ctrl";
}
private void button1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\n') button1_Click(sender, new EventArgs());
}
解決方案中,只需將KeyPress事件添加到Button1,然后在按鍵事件Button1_KeyPress中應用以下代碼:
if (e.KeyChar == '\n') Button1_Click(sender, new EventArgs());
我找到了一種解決方案,可讓您單擊Enter或Ctrl + Enter:
private void txtIP_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\n' || e.KeyChar == '\r') btnStart_Click(sender, new EventArgs());
}
好的,所以我終於找到了一個可行的解決方案,方法是將其添加到重寫的ProcessDialogKey()方法中:
if (keyData == (Keys.Enter | Keys.Control))
{
(this.ActiveControl as Button).PerformClick();
}
我不知道它是否符合“干凈”代碼的要求,但是它具有滿足我的2個要求的優點:將Ctrl + Enter函數設置為Ctrl + Click,而不必為每個Button聲明2個方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.