Announcement

Collapse
No announcement yet.

Validating bzw Leave-Ereignis tritt nicht ein

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Validating bzw Leave-Ereignis tritt nicht ein

    Hallo,


    ich suche jetzt schon länger, finde aber keine endgültige Antwort:

    Ich erstelle zur Laufzeit ein Panel und darauf mehrere Textboxen, die Validating-Ereignisse besitzen. Leider tritt weder das Validating noch das Leave-Ereignis ein, wenn ich auf mein MenuStrip klicke bzw. Funktionen von dort aufrufe (auch mit Shortcuts).
    Ist das jetzt tatsächlich so, dass diese Ereignisse (und andere) nicht eintreten, wenn ich mein Panel mit der Maus verlasse oder Ereignisse außerhalb mittels Shortcuts (z.B. Menü-Datei-Speichern) aufrufe?
    Wie vermeide ich so ein Problem (oder: wie macht man es richtig)?


    cu
    Karli

  • #2
    Ein Eintrag in einem Menustrip hat selbst keinen Focus. Da deshalb der Focus auf der Textbox bleibt gibt es natürlich keine Events die beim Verlassen des Controls auftreten.

    Wie vermeide ich so ein Problem (oder: wie macht man es richtig)?
    - Databinding verwenden
    - im EventHandler hinter dem MenustripItem EndEdit der BindingSource oder der gebunden Datenklasse aufrufen
    - Prüfung der Daten in der gebunden Datenklasse vornehmen

    Für eine Quick&Dirty Lösung könntest du einfach einen Focuswechsel im EventHandler hinter dem MenustripItem provozieren.

    Comment


    • #3
      Hallo Ralf,

      erstmal Danke.

      Dann: Quick&Dirty hab ich schon jetzt würd ich es aber gerne vernünftig machen. Könntest du mir da noch etwas genauer (evtl. Beispiel) helfen?



      Gruß,
      kk

      Comment


      • #4
        Es gibt nicht denn einen Weg es richtig zu machen. Sondern je nach Anforderung und von dir gewählter Technik gibt es da ein paar Best Practices nach denen man sich richten kann. Um dir auch nur irgendwas sinnvolles raten zu können zeig uns was du bisher machst(Wo speicherst du die Daten, wie hältst du sie im Speicher, wie bekommst du die in und aus Controls raus etc) und was für Anforderungen an das Validierungsverhalten hast du(zu welchem Zeitpunkt möchtest du Validieren, was möchtest du Validieren - einzelne Property, eine Klasse, ein ganzes Modell etc.).

        Comment


        • #5
          Sinn und Zweck ist ein Eingabeformular für Daten, deren Eingabefelder mittels einer XML-Datei erstellt werden, weil das vorher teilweise mit Excel gemacht wurde und es da immer Probleme mit verschiedenen Versionen und den Userforms von Excel gibt.

          Also lese ich die XML-Datei aus und erstelle dann zur Laufzeit ein Panel und auf diesem die Eingabe-Felder (Text- und Comboboxen). Für Datumsangaben habe ich z.B. eine Validierung eingebaut.
          Solange ich innerhalb des Panels in meinen Feldern zumspringe, kein Problem. Sobald ich allerdings über mein Menü eine Funktion aufrufe, beispielsweise Daten in meinen DataTable speichern (zur Anzeige bereits eingegebener Daten über ein DataGridView und DataView), wird nicht mehr validiert weil das Menu-Element den Focus nicht erhält und meine Boxen ihn nicht verlieren.

          Derzeit setze ich beim Aufruf des Menüeintrags bzw. der Funktion dahinter vorher nochmal den Focus auf mein GridView und löse damit die Validierung der Eingabefelder aus.

          Vereinfacht das Erstellen des EingabePanels mit den Eingabefeldern:

          Code:
          Dim myPanel as TestPanel 'meine Klase für das Erstellen des Eingabepanels
          myPanel = new TestPanel(xml-Struktur, .....) 
          Me.Controls.Add(myPanel)
          Mein MenuItem "Erfassen" überträgt dann die Daten zum DataTable. Falls hier ein zu validierendes Eingabefeld nocht nicht verlassen wurde, würde auch keine Validierung stattfinden.


          Gruß,
          kk


          PS: Ich hab nix mit EDV gelernt - googlen hilft, aber leider nicht immer

          Comment

          Working...
          X