WinForms-Validating-Ereignis wird verhindert, dass der Escape-Taste schließen der form

Ich habe ein einfaches Formular mit einem einzelnen Textfeld, plus Schaltflächen OK und Abbrechen. Die Form ist AcceptButton und CancelButton korrekt eingestellt sind, und die Schaltflächen OK und Abbrechen haben Ihre DialogResult gesetzt auf 'OK' und 'Abbrechen'.

Möchte ich hinzufügen, dass die überprüfung der TextBox, die verhindern, dass Nutzer von OK-ing-form, wenn die Validierung fehlschlägt, aber das wird auch Ihnen erlauben, zu kündigen, als üblich.

Die CausesValidation-Eigenschaft True ist standardmäßig auf allen Reglern, aber ich habe dies geändert auf False, auf die Schaltfläche Abbrechen.

Sicher genug, klicken auf OK oder drücken die Enter-Taste führen Sie das Validating-Ereignis ich verdrahtet, um das Textfeld. Drücken Sie die Abbrechen-Taste umgeht die Validierung, das ist perfekt.

Jedoch das drücken von Escape zum Abbrechen des Formulars wird nicht führen Sie die gleiche wie das drücken der Schaltfläche Abbrechen - es stellt sich die Validating-Ereignis und verhindert, dass der Benutzer Sie verlässt.

Gibt es eine Möglichkeit, dass die Escape-Taste durchführen soll, d.h. nicht zu erhöhen das Validating-Ereignis aus, als ob der Abbrechen button gedrückt wurde?

Eine komplette Lösung gearbeitet wird:

Erstellen Sie eine neue Windows Forms-Anwendung. Fügen Sie ein zweites Formular auf das Projekt.

Fügen Sie diesen code in Form1-Konstruktor nach InitializeComponent():

MessageBox.Show((new Form2()).ShowDialog().ToString());

Dies zeigt die DialogResult zurück von unserer zweiten form.

Fügen Sie diesen code in Form2 Konstruktor nach InitializeComponent():

TextBox txtName = new TextBox();

txtName.Validating +=
    new CancelEventHandler((sender, e) =>
    {
        if (txtName.Text.Length == 3)
        {
            MessageBox.Show("Validation failed.");
            e.Cancel = true;
        }
    });

Button btnOk = new Button
{
    Text = "OK",
    DialogResult = DialogResult.OK
};
Button btnCancel = new Button
{
    Text = "Cancel",
    CausesValidation = false,
    DialogResult = DialogResult.Cancel
};
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Controls.AddRange(new Control[] 
{
    txtName, btnOk, btnCancel 
});

this.AcceptButton = btnOk;
this.CancelButton = btnCancel;

this.Controls.Add(panel);

In diesem vereinfachten Beispiel das Textfeld wird nicht lassen Sie gehen, wenn 3 Zeichen Eingabe. Sie können drücken Sie die Schaltfläche "Abbrechen" oder schließen Sie das Formular direkt, auch wenn es 3 Zeichen vorhanden; jedoch drücken der ESC-Taste wird nicht das gleiche tun - es feuert das Validating-Ereignis in der Erwägung, dass es sollte die gleiche wie das drücken einer Taste Abbrechen.

  • "WinForms-Validierung verhindert escape-Taste schließen Sie das Formular" ich habe das gleiche problem.
InformationsquelleAutor Dave R. | 2011-01-25
Schreibe einen Kommentar