Mehrere Fenster verwalten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrere Fenster verwalten

    Hallo Leute,

    in dem Programm werden mehrere Fenster (SDI) kontrolliert nacheinander abgearbeitet.
    Alles soweit , so gut.

    Jetzt soll der Benutzer aber die Möglichkeit haben, ein oder mehrere Fenster zurück gehen zu können.
    Dem Benutzer ist dabei klar, daß alle nach "hinten" (zurück) verlassene Fenster gelöscht werden müssen.

    Falls in einem Fenster Daten verändert werden, müssen die neuen Daten in dem nachfolgenden Fenster
    entsprechend den neuen Daten aus einer DB angepasst werden.

    Habe mich etwas verzettelt, und benötige mal wieder einen kleinen TRITT.

    Brainfuck-Quellcode

    1. Public Sub Ablaufkontrolle()
    2. nowForm = myForms(Zähler)
    3. ' wenn Form weiter
    4. If Status = DialogResult.OK Then
    5. nowForm.Hide()
    6. Zähler += 1
    7. ' suche nach der Form
    8. nowForm = ShowForm(myForms(Zähler))
    9. Else ' wenn Form zurück
    10. nowForm.Close()
    11. Zähler -= 1
    12. nowForm = myForms(Zähler)
    13. End If
    14. nowForm.Show()
    15. End Sub
    16. [line]--------------------------------------[/line]
    17. Public Sub Form_Liste()
    18. ' Aufzählung as new Dictionary(of Integer, Form)
    19. ' Elemente hinzufügen
    20. myForms.Add(0, frmInfo)
    21. myForms.Add(1, frmStart)
    22. myForms.Add(2, frmRasse)
    23. myForms.Add(3, frmEigenNeu)
    24. myForms.Add(4, frmAbenteurer)
    25. myForms.Add(5, frmFähigkeiten)
    26. myForms.Add(6, frmEnde)
    27. End Sub
    28. [line]---------------------------------------------[/line]
    29. Function ShowForm(ByVal FormName As Form) As Form
    30. Dim myAssembly As System.Reflection.Assembly
    31. Dim mytypes As Type()
    32. Dim Form As Form = Nothing
    33. ' die aktuelle Assembly zuweisen
    34. myAssembly = System.Reflection.Assembly.GetExecutingAssembly
    35. ' holt sich alle Typen die in der Assembly vorhanden sind
    36. mytypes = myAssembly.GetTypes
    37. For Each mType As Type In mytypes
    38. ' der aktuelle Typ von der Klasse Form abgeleitet und auch den richtigen Namen besitzt
    39. If mType.BaseType Is GetType(Form) AndAlso mType.Name = FormName.Name Then
    40. ' Wenn vorhanden, eine Instanz der Form herstellen
    41. Form = CType(Activator.CreateInstance(mType), Form)
    42. ' Schleife vorzeitig verlassen
    43. Exit For
    44. End If
    45. Next
    46. Return Form
    47. End Function
    48. [line]---------------------------------------------[/line]
    49. Public Function IsLoaded(ByVal formName As Form) As Boolean
    50. läuft = False
    51. ' alle geöffneten Forms durchlauden
    52. For Each part As Form In Application.OpenForms
    53. If part.Name.ToLower = formName.Name.ToLower Then
    54. läuft = True : Exit For
    55. End If
    56. Next
    57. Return (läuft)
    58. End Function


    Wenn nur nach vorne abgearbeitet wird gibt es kein Problem mit den Forms.

    Sobald aus einer Form nach hinten gesprungen wird, erhalte ich immer ein Neues(altes) Form.
    Die neue Form zeigt dann auch natürlich nicht die schon mal gemachten Einstellungen.

    Ebensowenig funktioniert das Löschen der letzten Form.

    Der Effekt sollte eigentlich so sein, als hätte man in der Statusleiste auf ein Icon eines vorherigen Fensters geklickt.
    Dabei erhält man ja auch das Fenster mit all seinen getätigten Einstellungen, und kein "sauberes" Fenster.

    Danke schon mal im Voraus

    Gruß druide

    druide schrieb:

    bin leider in der falschen Abteilung gelandet.
    Wieso?
    Poste einen Beitrag und der Thread ist wieder offen.
    Das ganze ist doch letztenendes ganz simpel.
    Mach Dir, wie bei manchen Installationsprogrammen, ein TabControl ohne Reiter (suche danach auf der Startseite) und einen Vor- und einen Zurück-Button, damit navigierst Du zur nächsten bzw. letzten Seite.
    Fertich.
    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!
    Hallo RodFromGermany,

    Danke für die Antwort.

    am Anfang von dem Projekt hatte ich auch daran gedacht es über TabControl zu programmieren,
    habe mich aber dann für die andere Version entschieden.

    Es muß ja auch so eine Möglichkeit geben, die einzelnen Forms zu koordinieren.
    Das ist leider so eine Macke von mir, nicht immer den leichtesten Weg einzuschlagen.

    Eine Zeit lang werde ich es noch auf diesem Wege probieren, dann werde ich Deinem Vorschlag
    umsetzen müssen.

    Bin in der irrwitzigen Annahme gewesen, das Problen "schnell" lösen zu können.
    Naja, so der Weg von der Theorie zur "harten" Praxis. X( ;(

    Trotzdem bin ich für jede Hilfe dankbar.

    Gruß druide

    druide schrieb:

    Es muß ja auch so eine Möglichkeit geben, die einzelnen Forms zu koordinieren.
    mit einem wesentlich höheren Aufwand.
    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!