我想创建一个TextBox数字。想法是在文本框中显示文本之前检查按下的键。我实现了TextBox的Method KeyDown()。 这是我的代码:
private void txtX_KeyDown(object sender, KeyEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
{
e.Handled = true;
}
}
KeyEventArgs没有KeyChar(我从教程中得到了这个)
我使用 WPF
答案 0 :(得分:2)
对于Windows窗体
e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57);
对于wpf
e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString()));
我正在使用VS2010
使用相同的逻辑U可以做更好的解决方案,更优雅:)
答案 1 :(得分:0)
我认为 KeyEventArgs 没有 KeyChar 属性。您可以查看
KeyEventArgs 定义如下。
public class KeyEventArgs : EventArgs
{
// Fields
private bool handled;
private readonly Keys keyData;
private bool suppressKeyPress;
// Methods
public KeyEventArgs(Keys keyData);
// Properties
public virtual bool Alt { get; }
public bool Control { get; }
public bool Handled { get; set; }
public Keys KeyCode { get; }
public Keys KeyData { get; }
public int KeyValue { get; }
public Keys Modifiers { get; }
public virtual bool Shift { get; }
public bool SuppressKeyPress { get; set; }
}
您可以尝试将键值转换为char,请参考下面的示例。
private string keyChar = string.Empty;
// Convert KeyValue to char
private void SomeKeyDown(object sender, KeyPressEventArgs e)
{
keyChar = (char)e.KeyValue;
}
答案 2 :(得分:0)
如果您使用的是WinForms,过滤字符的最简单方法是在KeyPress事件中。
private void txtX_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
}
答案 3 :(得分:0)
使用此代码。
private void txtbox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString()));
}
答案 4 :(得分:0)
然后你这样做:
if (e.Key == Key.D)
e.Handled = true;
else
e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString()));
:d