簡體   English   中英

C#防止TextBox焦點時出現熱鍵

[英]C# Prevent Hotkeys while TextBox focus

我有一個包含多個C#窗體文本框的程序。 我已經為激活某些功能的整個表單設置了熱鍵。 我的問題是我的熱鍵已設置到Form KeyDown事件上,並且如果我在TextBox上寫東西,它們就會激活。

示例 :一個熱鍵可能是I。每次我將字母寫到文本框時,熱鍵都會激活。

先前的解決方案和問題 :我曾考慮過將CTRL + Hotkey之類的Key放在熱鍵的前面,但是由於CTRL + C是Windows Copy命令等,這些也存在問題。SHIFT是UpperKey按鈕。

問題 :當我在不使用表單中的所有內容的情況下寫文本框時,是否可以阻止激活熱鍵?

編輯:一些要求的代碼。 按鈕代碼來自存儲的XML文件或快捷鍵Form + Class(單獨),在其中為它們設置了一個窗口。

    public Hotkeys hotkeysForm = new Hotkeys();

    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        toggleInformation = hotkeysForm.toggleInformation;

        if (e.Control && e.KeyCode == toggleInformation)
        {
            showInfo(true);
        }
        else if (e.KeyCode == toggleInformation)
        {
            if (!isInfoActive)
                showInfo();
            else
                hideInfo();               
        }

     }

如果可以解決您的問題,則應嘗試使用此技巧,創建一個擴展的文本框並在代碼中使用它。 您可以處理是否在文本框中編寫按下的鍵,也可以在hotkeyPressed檢查中進行處理。

public class ETextBox : System.Windows.Forms.TextBox
{
    protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (hotKeyPressed) // this is the condition when you don't want to write in text.
        {
            //Do whatever you want to do in this case.
        }
        else
        {
            base.OnKeyDown(e);
        }
    }
}

當texbox是活動控件時,您可以禁用熱鍵。 為所有文本框添加EnterLeave事件:

    private void textBox_Enter(object sender, EventArgs e)
    {
        KeyPreview = false;
    }

    private void textBox_Leave(object sender, EventArgs e)
    {
        KeyPreview = true;
    }

暫無
暫無

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

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