2009-07-02 3 views
0

вчера я сделал текстовое поле пользовательского со своим собственным валидатора:Что вызывает подтверждение в моем текстовом поле?

public partial class CustomTextBox : TextBox 
{ 
    ErrorProvider errorProvider; 

    public CustomTextBox() 
    {    
     InitializeComponent(); 
     errorProvider = new ErrorProvider(); 
     errorProvider.DataSource = this; 
    }   


    protected override void OnValidating(CancelEventArgs e) 
    { 
     base.OnValidating(e); 
     if (this.Text.Trim() == "") 
     { 
      errorProvider.SetError(this, "Required field"); 
      e.Cancel = true; 
      return; 
     } 
     errorProvider.SetError(this, ""); 
    } 


} 

Так я это на форме с помощью кнопки отмены и установите CausesValidation ложь на кнопку отмены. Я также устанавливаю для причинValidation в форме false. По какой-то причине, если я нажимаю кнопку «Отменить», мой пользовательский блок по-прежнему запускает событие onValidating. Любые идеи, что вызывает это? Я бы не хотел, чтобы что-то подтверждало мои текстовые поля, пока не нажмет кнопку отправки, которая попытается проверить все элементы управления в форме. Таким образом, пользователь не получает принудительного ввода данных в элемент управления, прежде чем переходить к другому. Звучит разумно? Это моя первая трещина в интерфейсе winforms.

ответ

0

Позже я нашел простое свойство вида AutoValidate. Я установил его в EnableAllowFocusChange, и теперь у меня есть точное поведение, которое я хочу, errorprovider будет предупреждать, когда пользователь покидает элемент управления, а проверка не выполняется, но пользователь не ограничивается элементом управления.

0

Похоже, что это известная проблема: Visual Studio Feedback.

Я установил AutoValidate = AutoValidate.Disable; на форму, и она больше не проверялась. Я не уверен, где вы поместили бы это в свое требование.

Смежные вопросы