繁体   English   中英

我们不能在PreviewKeyDown事件中获得Text Box的当前值吗?

[英]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.KeyKeyEventArgs

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM