Laden...

Label.Click Event ignoriert Validating-Abbruch

Letzter Beitrag vor einem Jahr 8 Posts 650 Views
Label.Click Event ignoriert Validating-Abbruch

Hi zusammen,

ich habe folgendes Problem: Auf einem Formular sind 2 Textboxen und ein Label. Sofern der validating-Handler von Textbox1 e.cancel auf true setzt, ist Textbox2 nicht mehr selektierbar. Kein Event von Textbox2 wird ausgeführt. Ebenso läßt sich die Anwendung auch nicht mehr schließen, bis der validating-Handler von Textbox1 mit e.cancel = false durchlaufen wird. Das ist das von mir gewünschte Verhalten.

Klickt man aber auf das Label, wird label_click(...), also der Click-Eventhandler des Labels, durchlaufen. Frage: Wie kann ich es unterbinden, dass beim Label der Eventhandler durchlaufen wird? Das ist doch auch ein Bug, oder hat das einen Hintergrund?

Gruß Joerg

WinForms ist über 20 Jahre alt und unfassbar weit verbreitet - die Wahrscheinlichkeit, dass Du einen Bug gefunden hast, sehr gering.
Zeig mal Deinen relevanten Code, dann muss niemand raten.

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //----------------------------------------------------------------
        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = ((TextBox)sender).Text != "1";
        }

        //----------------------------------------------------------------
        private void textBox2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Klick Textbox2");
        }

        //----------------------------------------------------------------
        private void label1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Klick Label1");
        }
    }
}

Textbox1 setzt e.cancel, wenn ein Wert ungleich '1' eingegeben wird. Klickt man dann auf Textbox2 passiert nichts. Was ja richtig ist. Klickt man auf das Label, wird die Messagebox 'Klick Label1' angezeigt. Warum verhalten sich Textbox2 und Label1 unterschiedlich?

Wo ist denn das Problem bzw. wo ist das von dir erwartete Verhalten dokumentiert.

Wenn die Validierung fehl schlägt, dann bleibt bei entsprechender Einstellung der Focus auf der TextBox. Somit können andere Elemente, die den Focus benötigen nicht mehr erreicht werden. EinLabelgehört aber nicht zu diesen "Ich brauche den Focus" Elementen.

Hat die Blume einen Knick, war der Schmetterling zu dick.

@BlonderHans,

ich wollte in einer MiniApp Label für die Navigation einsetzen (Ja, ja. Ich weiß, das macht man ja auch nicht 😃 ). Da ist es natürlich doof, wenn die Label nicht auf die Validierung der anderen Controls warten.

Labels warten nicht und haben auch keinen Einfluss auf den Validierungsflow. Das ist nicht angedacht.
In der UI "warten" ist eh keine gute Idee, weil das implizit bedeuten würde, dass Deine UI blockiert.

Zitat von Abt

In der UI "warten" ist eh keine gute Idee, weil das implizit bedeuten würde, dass Deine UI blockiert.

Na ja, die gesamte Application wartet ja auch 😉 Sie blockiert sogar ganz explizit. Aber ich habe verstanden, dass das für Labels nicht vorgesehen ist. Ich nutze nun ein globales 'busy-Flag', das ich in den Validierungshandlern setze. Das kann ich dann in der Navigation abfragen. Auf jeden Fall besten Dank für eure Unterstützung.

Gruß Joerg

Zitat von joerg55

Sie blockiert sogar ganz explizit.

Das ist Deine umgesetzte Logik, die dafür sorgt, dass Deine "Applikation" blockiert.
Das ist aber nicht das technische Blockieren der UI.