簡體   English   中英

ComboBox KeyDown事件如何考慮最后按下的鍵

[英]ComboBox KeyDown event how to take into account last pressed key

我有一個可編輯的組合框,必須處理輸入的值(它必須是一個數字)。 在keydown事件中,我分析了combobox.text並采取相應的行動。 當然,在這種情況下,combobox.text應該包含keydown事件之前的所有文本。 相反,我希望包含最終的完整文本鍵。

我試過放

e.handled=true;

在分析combobox.text之前,但是沒有用。

作為輔助解決方案,我分析e.key並且必須將其轉換為字符串並應對它。 問題是它是一個關鍵的事件。 試過了

char ch ;
String str;
if (e.Key > Key.D0 && e.Key < Key.D9)
{
  ch = (char)((int)e.Key - (int)Key.D0);
  str = ch.ToString();
}

但它不起作用

--- ADD ---對不起,我沒有說清楚,我會努力讓它變得更好。 我希望在以下活動中使用我的組合框

private void ComboBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)

在里面我想做點什么

Analyze(combobox.text)

所以簡而言之

private void ComboBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
 if((e.Key > Key.D0 && e.Key < Key.D9) || (e.Key > Key.NumPad0 && e.Key < Key.NumPad9))
  {
    Analyze(comboBox.text)---->text here has to be the combobox.text plus the new pressed key 
  }
}

除了Rowbear提出的解決方案之外,還有一種解決我問題的簡單方法。 這就是使用ComboBox_KeyUp事件。 通過這樣做,新密鑰已經知之甚少。 通過說我想把鑰匙放下來,我誤導了所有人。 我添加這個只是為了完整

我並不完全清楚在你的情況下“相應地采取行動”是什么意思,但是請嘗試使用這個代替你的二級解決方案:

        string str = string.Empty;
        if (e.Key > Key.D0 && e.Key < Key.D9)
        {
            str = ((int)e.Key - (int)Key.D0).ToString();
        }
        MessageBox.Show(str);

把它放在ComboBox的keydown事件中為我返回正確的字符串,假設正確的方法是獲取用戶剛剛按下的數字鍵的字符串表示。

我真的很好奇你的目標是什么。 或許詳細闡述一下可以得到更好的答案。 您是否必須在輸入的每個鍵上驗證輸入? 為什么?

我不能完全理解你想要什么,但我會努力做到最好。 如果要讀取用戶發短信的字符,使用事件PreviewTextInput會更方便:

XAML:

<ComboBox Name="comboBox" IsEditable="True" PreviewTextInput="comboBox_PreviewTextInput"/>

C#:

string theWholeString;
private void comboBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
   string currentCharacter = e.Text;
   theWholeString += e.Text;
}

它更好,因為你不必弄清楚輸入是數字還是字符串。

如果我誤解了你,請告訴我。

暫無
暫無

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

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