2009-07-02 5 views
0

Ich habe ein benutzerdefiniertes Textfeld gestern mit seinem eigenen Validator:Was verursacht die Validierung meiner Textbox?

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, ""); 
    } 


} 

Also habe ich dies auf einem Formular mit einer Schaltfläche Abbrechen und setze Causes auf false auf der Schaltfläche Abbrechen. Ich setze causesValidation auf dem Formular auch auf false. Aus irgendeinem Grund, wenn ich auf Abbrechen klicke, feuert meine customtextbox immer noch das onValidating-Ereignis. Irgendwelche Ideen, was das verursacht? Ich möchte meine Textfelder nicht validieren lassen, bis ich auf einen Absenden-Button klicke, der versucht, alle Steuerelemente auf dem Formular zu validieren. Auf diese Weise wird ein Benutzer nicht gezwungen, Daten in das Steuerelement einzugeben, bevor er zu einem anderen übergeht. Ton vernünftig? Dies ist mein erster Riss in einer Winforms UI.

Antwort

0

Ich fand später eine einfache Eigenschaft des Formulars namens AutoValidate. Ich setze es auf EnableAllowFocusChange und jetzt habe ich genau das Verhalten, das ich will, wird der Fehlerprovider warnen, wenn ein Benutzer das Steuerelement verlässt und Validierung schlägt fehl, aber der Benutzer ist nicht auf das Steuerelement beschränkt.

0

Sieht aus wie es ein bekanntes Problem ist: Visual Studio Feedback.

Ich setze AutoValidate = AutoValidate.Disable; auf das Formular, und es nicht mehr validiert. Ich bin mir nicht sicher, wo Sie das in Ihre Anforderung passen würden.