ComboBox KeyDown事件如何考虑最后按下的键

时间:2015-12-22 08:04:44

标签: c# wpf combobox keydown

我有一个可编辑的组合框,必须处理输入的值(它必须是一个数字)。 在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 个答案:

答案 0 :(得分:2)

除了Rowbear提出的解决方案之外,还有一种解决我问题的简单方法。这就是使用ComboBox_KeyUp事件。通过这样做,新密钥已经知之甚少。通过说我想把钥匙放下来,我误导了所有人。我只是为了完整性而添加了这个

答案 1 :(得分:1)

我并不完全清楚在您的情况下“相应行为”意味着什么,但请尝试使用此代替您的辅助解决方案:

        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事件中为我返回正确的字符串,假设正确的方法是获取用户刚刚按下的数字键的字符串表示。

我真的很好奇你的目标是什么。或许详细阐述一下可以得到更好的答案。您是否必须在输入的每个键上验证输入?为什么呢?

答案 2 :(得分:0)

我无法完全明白你想要什么,但我会努力做到最好。如果您想阅读用户发短信的字符,使用事件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;
}

最好不要弄清楚输入是数字还是字符串。

如果我误解了你,请告诉我。