我有一个可编辑的组合框,必须处理输入的值(它必须是一个数字) . 在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
}
}
3 回答
我并不完全清楚在你的情况下“相应地采取行动”是什么意思,但是请尝试使用这个代替你的二级解决方案:
把它放在ComboBox的keydown事件中为我返回正确的字符串,假设正确的方法是获取用户刚刚按下的数字键的字符串表示 .
我真的很好奇你的目标是什么 . 或许详细阐述一下可以得到更好的答案 . 您是否必须在输入的每个键上验证输入?为什么?
除了Rowbear提出的解决方案之外,还有一种解决我问题的简单方法 . 这就是使用ComboBox_KeyUp事件 . 通过这样做,新密钥已经知之甚少 . 通过说我想把钥匙放下来,我误导了所有人 . 我添加这个只是为了完整
我不能完全理解你想要什么,但我会努力做到最好 . 如果要读取用户发短信的字符,使用事件
PreviewTextInput
会更方便:XAML:
C#:
它更好,因为你不必弄清楚输入是数字还是字符串 .
如果我误解了你,请告诉我 .