[英]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.