Dialog in DLL öffnen ohne das vorheriger Dialog geschlossen wird

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von itkokot.

    Dialog in DLL öffnen ohne das vorheriger Dialog geschlossen wird

    Hallo liebes Forum,

    ich habe ein Problem durch das ich nun die Tischkante genug angebissen habe.

    Ich öffne aus meinem Hauptprogramm über eine DLL einen Dialog (damit das Hauptfenster nicht benutzt werden kann) mit einem Formular um Kundendaten einzugeben.
    Nun prüfe ich vor dem Speichern ob bestimmte Felder ausgefüllt wurden.
    Die entsprechende Meldung welche Felder noch gefüllt werden müssen gebe ich als extra Dialog aus.

    Nun zu meinem Problem.

    Der Dialog mit der Fehlermeldung schließt beim klick auf OK, egal ob als

    VB.NET-Quellcode

    1. ​Messagebox.ShowDialog()
    oder als Extra Form, den vorherigen Dialog.

    Wie kann man das schließen unterbinden, so das der 1. Dialog offen bleibt?

    Danke für die Hilfe
    LG
    Christian
    @itkokot Poste mal die komplette Prozedur mit dem Aufruf-Code im Dialog 1.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Private Function FelderPrüfen()
    2. If Trim(txtFirma.Text) = "" Or Trim(txtNachname.Text) = "" Then
    3. Fehlermeldung = "Das Feld 'Nachname' oder das Feld 'Firma' darf nicht leer sein." & vbCrLf
    4. End If
    5. If Trim(txtStrasse.Text) = "" Then
    6. Fehlermeldung = Fehlermeldung & "Das Feld 'Strasse' darf nicht leer sein." & vbCrLf
    7. End If
    8. If Trim(txtPLZ.Text) = "" Then
    9. Fehlermeldung = Fehlermeldung & "Das Feld 'PLZ' darf nicht leer sein." & vbCrLf
    10. End If
    11. If Trim(txtOrt.Text) = "" Then
    12. Fehlermeldung = Fehlermeldung & "Das Feld 'Ort' darf nicht leer sein." & vbCrLf
    13. End If
    14. If Fehlermeldung = "" Then
    15. Return True
    16. ElseIf Fehlermeldung <> "" Then
    17. Dim _dlg As New frmKundenWarnung
    18. _dlg.ShowDialog()
    19. End If
    20. End Function


    Das ganze greift dann im Anschluss auf die Public Fehlermeldung zurück.
    Das funktioniert soweit auch, nur das Dialog 2 den Dialog 1 auch schließt.
    kann ich nicht nachstellen
    versuch mal den relevanten Unterschied zu meinem Testprojekt zu finden
    Dateien
    • WindowsApp1.zip

      (16,83 kB, 62 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @itkokot Da ist absolut nichts zu erkennen.
    Was ist Dialog 1?
    Was ist Dialog 2?
    In welchem Zusammenhang stehen die?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK, mein Fehler, das man da nicht viel erkennt stimmt:

    also, ich rufe über mein Mainform eine Funktion in einer DLL auf:

    VB.NET-Quellcode

    1. Public Shared Function frmKunden(ByVal dbString As String)
    2. DatenbankString = dbString
    3. 'Dim _frmKunden As New frmKunden
    4. Using _frmKunden As New frmKunden
    5. _frmKunden.ShowDialog()
    6. End Using
    7. Return True
    8. End Function


    Diese ruft das Fenster auf, in welchem ein Kunde angelegt werden kann.
    Bei Drücken auf "Speichern" prüft das Programm anhand einer Funktion welche Felder gefüllt sind und ruft wieder rum eine Form auf, welche die Entsprechenden Fehler ausgibt.

    VB.NET-Quellcode

    1. Private Function FelderPrüfen()
    2. If Trim(txtFirma.Text) = "" Or Trim(txtNachname.Text) = "" Then
    3. Fehlermeldung = "Das Feld 'Nachname' oder das Feld 'Firma' darf nicht leer sein." & vbCrLf
    4. End If
    5. If Trim(txtStrasse.Text) = "" Then
    6. Fehlermeldung = Fehlermeldung & "Das Feld 'Strasse' darf nicht leer sein." & vbCrLf
    7. End If
    8. If Trim(txtPLZ.Text) = "" Then
    9. Fehlermeldung = Fehlermeldung & "Das Feld 'PLZ' darf nicht leer sein." & vbCrLf
    10. End If
    11. If Trim(txtOrt.Text) = "" Then
    12. Fehlermeldung = Fehlermeldung & "Das Feld 'Ort' darf nicht leer sein." & vbCrLf
    13. End If
    14. If Fehlermeldung = "" Then
    15. Return True
    16. ElseIf Fehlermeldung <> "" Then
    17. Dim _dlg As New frmKundenWarnung
    18. _dlg.ShowDialog()
    19. End If
    20. End Function


    Es ist aber nun auch vollkommen egal, ob mit Using, oder ohne, der Fehler bleibt gleich, es werden trotzdem beide Forms geschlossen.
    Der Dialog mit der Warnung wird folgendermaßen geschlossen:

    VB.NET-Quellcode

    1. Private Sub cmdOK_Click(sender As Object, e As EventArgs) Handles cmdOK.Click
    2. 'Fehlermeldung leeren
    3. frmKunden.Fehlermeldung = ""
    4. Close()
    5. End Sub
    @itkokot Wir brauchen nicht Deine 42 Fehlermeldungen, sondern die gesamte Ablaufkette.
    Mach ein kleines Testprojekt, das Deinen Effekt reproduziert und poste dies.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das Ganze mit ner DLL nachgebaut. Läuft immer noch wie gewünscht. Daher bitte nochmal Post#4 beachten und auch drauf reagieren.
    Zum anderen: Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort Option Strict On. Denn bei Public Shared Function frmKunden(ByVal dbString As String) und Private Function FelderPrüfen() sind keine Rückgabewerte definiert und nicht alle Pfade geben einen Wert wieder.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo und danke euch für die große Hilfe,

    manchmal ist man einfach zu doof.
    Ich hatte das entsprechende Fenster welches den Dialog öffnet, als FixedDialog eingestellt, dadurch wurde das ebenso geschlosen.

    Wenn das ganze auf: FixedSingle steht, dann bleibt es auf.
    Entscheidend war hier die Hilfe von @VaporiZed. Danke für die Minianwendung, die meine Gedanken gecleart hat.

    Beste Grüße