簡體   English   中英

TextBox沒有監聽在C#中按空格鍵之前輸入密鑰

[英]TextBox not listening Enter key before Space key is pressed in C#

我必須在文本框上處理“Enter”鍵事件,所以我創建了一個繼承自textBox的新類,並且已經重寫了IsInputKey方法。 問題是KeyDown事件沒有被激發而沒有先按空格鍵。

public class EnterTextBox : TextBox
{
    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            return true;
        }
        else
        {
            return base.IsInputKey(keyData);
        }
    }
}

從上面的類創建后

EnterLisTextBox enterTextBox1 = new EnterLisTextBox();            
enterTextBox1.KeyDown += enterTextBox1_KeyDown;

鍵向下事件處理程序是

void enterTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Pressed enter");;
    }  
}

但這只有在我使用“輸入鍵”之前按下“空格鍵”時才有效。 但是,即使我在文本框中重新輸入了所有內容,我也按下了空格鍵。 為什么是這樣? 為什么按空格鍵是先決條件?

更新:

實現keyPress事件對我有用,但是如果任何人知道為什么在使用sapce bar之前上面沒有工作。 這就是我使用按鍵的方式,請注意e.KeyChar =='\\ r'

void enterTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\r')
    {
        MessageBox.Show("Pressed enter");
    }  
}

我猜在這個事件中輸入鍵不算作“普通”鍵,所以你必須在PreviewKeyDown事件方法中明確地使它成為輸入鍵:

    private void enterTextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Down:
                e.IsInputKey = true;
                break;
            case Keys.Up:
                e.IsInputKey = true;
                break;
            case Keys.Enter:
                e.IsInputKey = true;
                break;
        }
    }

例如,對於箭頭鍵也是如此。 當然,您的文本框需要首先關注。

首先,您必須選擇TextBox,然后必須按Enter鍵,否則不會觸發Textbox上的KeyDown事件。

當您按空格鍵時,您的文本框正在獲得焦點/被選中,因此您的文本框能夠處理輸入鍵事件。

暫無
暫無

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

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