цифровая клавиатура TextBox - PullRequest
1 голос
/ 30 декабря 2011

Я хочу сделать текстовое поле числовым. Идея состоит в том, чтобы проверить нажатую клавишу до того, как текст отобразится в текстовом поле. Я реализую метод KeyDown () TextBox. Вот мой код:

private void txtX_KeyDown(object sender, KeyEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
    {
        e.Handled = true;
    }
}

KeyEventArgs не имеет KeyChar (я получил это из учебника)

Я использую WPF

Ответы [ 5 ]

2 голосов
/ 30 декабря 2011

Для оконной формы

e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57); Для wpf e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString())); Я использую VS2010 Используя ту же логику U может сделать лучшее решение, более элегантное:)
0 голосов
/ 13 марта 2014

Затем вы делаете это:

        if (e.Key == Key.D)
            e.Handled = true;
        else
            e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString()));

: D

0 голосов
/ 14 июня 2012

Используйте этот код.

private void txtbox_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !("D1D2D3D4D5D6D7D8D9D0".Contains(e.Key.ToString()));  
}
0 голосов
/ 30 декабря 2011

Если вы используете WinForms, самый простой способ фильтрации символов - это событие KeyPress.

private void txtX_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
}
0 голосов
/ 30 декабря 2011

Я считаю, что 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; }
}

И вы можете попытаться преобразовать значение ключа в символ, пожалуйста, обратитесь кобразец как показано ниже.

private string keyChar = string.Empty;

// Convert KeyValue to char
private void SomeKeyDown(object sender, KeyPressEventArgs e)
{
    keyChar = (char)e.KeyValue;
}
...