[英]Can't We get Current value of Text Box in PreviewKeyDown Event?
我试图在PreviewKeyDown事件中读取文本框的当前值但无法获取当前值。
这是我的代码,
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
{ }
}
也许你的问题是你在PreviewKeyDown
问,所以当它被调用时,框中仍然没有值。 如果你想在盒子实际发生变化时被调用,你需要挂钩到KeyDown
甚至更好的TextChanged
。
PreviewKeyDown
用于在实际应用之前检查更改的内容,这是一种验证。
修改的值存储在keyEventArgs
,而不是文本框中。
它可以在任何时间阅读文本框的值Text
的属性TextBox
控件:
var currentValue=textBox.Text;
要读取输入的keys
的键盘,你可以使用e.Key
的KeyEventArgs
:
private void txtDoscountValue_PreviewKeyDown(object sender, KeyEventArgs e)
{
try
{
string input=e.Key;
var ee = txtDoscountValue.Text;
}
catch { }
}
更新:
可以使用KeyConverter
类将Keys
转换为string。 您应该将程序集System.Windows.Forms的引用添加到WPF项目以使用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 { }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.