Member 12385326 Ответов: 2

Событие нажатия клавиши в C#


я хочу ввести eky в текстовое поле,которое будет печатать его в метке при нажатии клавиши.
но когда я ввожу ключ, он не печатает этот ключ в метке в тот раз,но в следующий раз, когда я нажимаю, он показывает этот текст в метке.

например, когда я нажимаю "2" в текстовом поле, то в метке ничего нет.
но когда я нажимаю "23", то в метке" 2 " есть.

Что я уже пробовал:

private void txtdisount_KeyPress(отправитель объекта, KeyPressEventArgs e)
{
если (char.Ечисло(электронная.Ключевой-символ) || электронная.Ключевой-символ == '.')
{

лблдисваль.Text = txtdisount.Текст;


}

ещё
{
е.Обрабатываются = е.Ключевой-символ != (ключи типа char).Обратно;
}

}

2 Ответов

Рейтинг:
1

Karthik_Mahalingam

попробовать это

lblDisVal.Text = txtdisount.Text + e.KeyChar.ToString();


Рейтинг:
0

OriginalGriff

Это происходит потому, что событие нажатия клавиши происходит до обновления свойства Text - если бы это было не так, вы не смогли бы использовать его для предотвращения ввода некоторых клавиш пользователем!
Используйте событие TextChanged для обновления и нажатие клавиши для фильтрации:

private void txtdisount_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (!char.IsNumber(e.KeyChar) && e.KeyChar != '.')
        {
        e.Handled = e.KeyChar != (char)Keys.Back;
        }
    }

private void txtdisount_TextChanged(object sender, EventArgs e)
    {
    lblDisVal.Text = txtdisount.Text;
    }
Но...вам, вероятно, было бы лучше использовать вместо этого элемент управления NumericUpDown!


Member 12385326

я использовал событие textChanged .. оно отлично работает для меня :)