Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';我们不能在PreviewKeyDown事件中获取文本框的当前值吗?_C#_Wpf - Fatal编程技术网

C# Can';我们不能在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;

我正在尝试读取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
        { }
    }      

使用
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事件根据以下内容:它捕获箭头键。