Какие события проверки вызываются для элемента управления TextBox? - PullRequest
1 голос
/ 04 января 2011

Есть ли какое-либо событие, которое срабатывает, когда значение текстового поля изменяется от состояния кода и когда текстовое поле проверяется или теряет фокус, и событие не срабатывает при нажатии клавиши, потому что у меня много расчетови это невозможно сделать при каждом нажатии клавиши

Ответы [ 4 ]

2 голосов
/ 04 января 2011
  • Используйте TextChanged для измененного текста.
  • Используйте LostFocus для случаев, когда текстовое поле теряет фокус.
  • Используйте Validating или Validated для проверки.

Вот порядок, в котором события вызываются для TextBox:

// Reference : http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validated.aspx
1) Enter  
2) GotFocus
3) Leave
4) Validating
5) Validated
6) LostFocus

Это должно помочь вам решить, куда вы хотите поместить свой код.

2 голосов
/ 04 января 2011

Нет события, которое бы удовлетворяло вашему требованию быть вызванным, когда значение текстового поля изменяется программно с помощью кода, но не , когда текст вводится пользователем. Событие TextChanged будет вызываться в любом случае (это довольно интуитивно понятно - текстовое значение меняется, и компьютер не знает или не заботится , что отвечает за его изменение). Как указывает документация для этого события:

Пользовательский ввод или установка свойства Text на новое значение вызывает событие TextChanged.

Если вам нужно запускать пользовательскую логику проверки при добавлении текста в текстовое поле в коде, вам нужно будет самостоятельно вызывать любой метод, содержащий логику проверки. Извлеките его в отдельный метод, который вызывается из обработчика событий Validating / Validated и из всех мест в вашем коде, где вы устанавливаете свойство Text текстового поля.

В дополнение к другим ответам, которые уже были опубликованы, я настоятельно рекомендую использовать Validating (если вы хотите отменить проверку) или Validated события для обработки текста, теряющего фокус, а не несколько более явно названное LostFocus событие.

0 голосов
/ 04 января 2011

Использовать переменную-член.

private bool _changeByCode;


public void DoSomeChanges()
{
    _changeByCode = true;
    textbox1.Text = "Hello";
    _changeByCode = false;
}

public void Textbox1_Change(object source, EventArgs e)
{
    if (_changeByCode)
        return;

     //do your validation here.
}
0 голосов
/ 04 января 2011

Вы можете использовать события LostFocus или Validated.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...