簡體   English   中英

形成KeyUp和KeyDown事件以更改變量

[英]Form KeyUp and KeyDown events to change variables

在我的應用程序中,我有:

private bool _clear = true;

此布爾值用於查看用戶在其中輸入新文本時(通過在TreeView中按TreeNode按下)是否應清除文本框。

然后,我的表單有以下兩個事件:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Modifiers == Keys.Control)
    {
        _clear = false;
    }

}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Modifiers == Keys.Control)
    {
        _clear = true;
    }
}

我想以某種方式在用戶按住CTRL鍵時將其清除為FALSE,而在釋放CTRL時將清除返回TRUE。

顯然我在這里寫的代碼行不通! 有什么問題和/或有更好的方法?

這是一個簡單的修復程序,因為當您釋放密鑰時,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;
}

該條件唯一成立的時間是控制權本身被保持。 在其他情況下,是為了在按下ctrl后再按下另一個鍵時將_clear設置為true,這是因為一旦按下Control鍵,它將觸發KeyDown事件。

基於此更改,只要您照顧if語句之后的按鍵操作(例如else if()的操作),就無需在KeyUp事件中進行任何設置。

如果您需要一些更深入的信息,請參見我的答案,了解鍵及其屬性的復雜性

編輯#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鍵是否在樹視圖的事件中按下。 像這樣:

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
        if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
            // Control key is down, do something...
        }
    }

您需要將窗體的KeyPreview屬性更改為True。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM