C# Can';我们不能在PreviewKeyDown事件中获取文本框的当前值吗?
我正在尝试读取PreviewKeyDown事件中文本框的当前值,但无法获取当前值 这是我的密码C# Can';我们不能在PreviewKeyDown事件中获取文本框的当前值吗?,c#,wpf,C#,Wpf,我正在尝试读取PreviewKeyDown事件中文本框的当前值,但无法获取当前值 这是我的密码 private void txtDoscountValue_PreviewKeyDown(object sender, KeyEventArgs e) { try { if (txtDoscountValue.Text == string.Empty) discountPercentage = 0;
private void txtDoscountValue_PreviewKeyDown(object sender, KeyEventArgs e)
{
try
{
if (txtDoscountValue.Text == string.Empty)
discountPercentage = 0;
else
discountPercentage = float.Parse(txtDoscountValue.Text);
CalculateCart(cartItems, discountPercentage, 0);
}
catch
{ }
}
使用
TextBox
控件的Text
属性,可以随时读取TextBox的值:
var currentValue=textBox.Text;
要读取键盘上输入的键
,可以使用KeyEventArgs的e.Key
:
private void txtDoscountValue_PreviewKeyDown(object sender, KeyEventArgs e)
{
try
{
string input=e.Key;
var ee = txtDoscountValue.Text;
}
catch { }
}
更新:
可以使用键转换器
类将键
转换为字符串。您应该向WPF项目添加对程序集System.Windows.Forms的引用,以使用KeyConverter
类:
private void textBox1_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
try
{
char c = '\0';
System.Windows.Input.Key key = e.Key;
if ((key >= Key.A) && (key <= Key.Z))
{
c = (char)((int)'a' + (int)(key - Key.A));
}
else if ((key >= Key.D0) && (key <= Key.D9))
{
c = (char)((int)'0' + (int)(key - Key.D0));
}
else if ((key >= Key.NumPad0) && (key <= Key.NumPad9))
{
c = (char)((int)'0' + (int)(key - Key.NumPad0));
}
//here your logic
}
catch { }
}
private void textBox1\u PreviewKeyDown(对象发送方,System.Windows.Input.KeyEventArgs e)
{
尝试
{
字符c='\0';
System.Windows.Input.Key=e.Key;
如果((key>=key.A)&&&(key=key.D0)&&(key=key.NumPad0)&&&(key,可能你的问题是你在PreviewKeyDown
上提问,所以当它被调用时,框中仍然没有值。如果你想在框实际更改时被调用,你需要挂接到KeyDown
或者更好的TextChanged
PreviewKeyDown
用于在实际应用更改之前检查更改的内容,这是一种验证
修改的值存储在keyEventArgs
中,而不是文本框中。谢谢您的回复@steppup,但我知道。我在PreviewKeyDown事件中询问,根据我的情况,TextChanged不适合我,我已经检查了您的建议,但我得到了诸如“Back”、“D2”、“NumPad8”等键名在EventArgs对象中…不。实际上我想根据文本框值执行一些计算,还有一件事是这个文本框值在其他地方同时发生变化,这就是为什么我没有使用TextChanged Event抱歉@Steppup它不能正常工作…例如,当我从数字键盘输入8时,我得到的值为“NumPad8”但我只想输入value@sagar请查看我的最新答案。我已编辑了此方法。希望有帮助,请随时提问:).your right@javirs。但根据我的场景,我正在尝试在PreviewKeydown事件中实现逻辑。因此,不可能在PreviewKeydown事件中正确获取当前值???您确实在对象中获取旧值。文本变量加上keyEventArgs.keyValue中的修改。第一次单击时,旧值为空。您可以验证或取消e通过将e.Handled设置为true或False来编辑用户。为什么向上、向下、向左和向右箭头未触发KeyDown事件根据以下内容:它捕获箭头键。