数字TextBox keydown

时间:2011-12-30 10:09:26

标签: c# wpf textbox numeric keydown

我想创建一个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

5 个答案:

答案 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