這是一個簡單的修復,當你釋放鍵,KeyUp事件沒有收到本身釋放的鍵的任何信息,所以只是屬性設置爲true:
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
_clear = true;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
_clear = false;
}
}
如果你想看到它的實時工作,一個標籤添加到您的形式和「_clear」變量的每個設置下補充一點:
label1.Text = _clear.ToString();
根據您的意見,更改第二個代碼塊:
if (e.KeyData.ToString() == "ControlKey, Control")
{
_clear = false;
}
else if(other shortcut conditionals go here or on other else if's)
{
_clear = true;
}
此條件將保持爲真的唯一時間是控制自行保存的時間。其他情況是爲了將ccle設置爲true,當您按ctrl後再按另一個鍵時,由於事實上只要按下控件,它就會觸發KeyDown事件。
基於這種改變,只要你照顧if語句之後的按鍵(例如if()),你就不需要在KeyUp事件中設置任何東西。
請參閱my answer here to the intricacies of keys and their properties如果您想要更深入的信息。
編輯#3:
只要你設置_clear爲true在每個條件的第一行,你應該能夠避免你正面臨着在您的評論的問題:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData.ToString() == "ControlKey, Control")
{
_clear = false;
}
else if(e.KeyData.ToString() == "O, Control")
{
_clear = true;
//Do other stuff here, such as opening a file dialog
}
}
謝謝,我也試過這個,但是有問題。我有其他的快捷方式,例如CTRL + A和那種類型的stuf。如果我爲另一個目的按下CTRL + A(這是菜單項的快捷方式),這將不是一個可靠的解決方案。有沒有辦法解決? –
修復,檢查答案的底部。 – KreepN
嗨,我也試過這種方式。不幸的問題依然存在。發生這種情況時,按下例如'CTRL + O'打開FileOpenDialog,即使對話框關閉,_clear也將保持爲false,因此我必須再次按下CTRL。是否有可能避免這種行爲? –