понять, как всё устроено. Буду рад если вы мне поможете разобраться с этой базой, поправить если не правильно мыслю и дать ответ на вопрос: а что следует, если свойство handled = true.
D0 — это код клавиши '0'. Есть код:
public void PreventInput(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.D0) { e.Handled = true; }
}
Очевидно, что есть делегат для этого обработчика, он находится в System.Windows.Forms.KeyPressEventArgs:
public delegate void KeyPressEventHandler(object sender, KeyPressEventArgs e);
Есть событие типа этого делегата:
public event KeyPressEventHandler KeyPress;```Ну а его обработчик выше.
Также, насколько я понимаю, есть какой-то неизвестный мне код в классе KeyPressEventArgs, который выглядит как-то так:
```KeyPress?.Invoke(this, new KeyPressEventArgs());
Сам класс KeyPressEventArgs имеет свойство Handled и KeyChar :
public bool Handled { get; set; }
Оно "Возвращает или задает значение, показывающее, было ли обработано событие KeyPress"
И оно = "true Если событие обработано; в противном случае — false".
И
public char KeyChar { get; set; } (Возвращает или задает символ, соответствующий нажатой клавише.)
Теперь как мне представляется этот код:
if (e.KeyChar == (char)Keys.D0) { e.Handled = true; }
Если на свойстве объекта класса KeyPressEventArgs — это объект e и свойство KeyChar — обнаружится, что свойство KeyChar равно символу '0', тогда мы свойству Handled присваиваем true.
Согласно определению, если оно true — то значит KeyPress обработано.
И тут я в тупике: что с того, что событие нажатия на клавишу обработано? Что следует из этого? Я нажал 9 — ок, e.Handled = false; — мы просто пропустили условие.
Я нажал 0 — мы заходим и говорим, свойство e.Handled = true. Ну а что следует из того, что свойство handled объекта = true???
Я вообще не знаю как понимать это🙄🙄 Я что-то не так понимаю выше?
1) В аргах нет никакого делегата;
2) Handled это просто флаг, который означает что событие обработано. В теории, любой программист может игнорировать. На практике конечно программисты уважают это условие и, поэтому если выставлено Handled, то дальнейшие обработчики ничего не делают
что бы понять , создай textbox подпишись на событие PreviewKeyDown и там же e.Handled =true, в textbox ничего записываться не будет
именно так я и сделал
только у меня событие KeyPress
Обсуждают сегодня