Announcement

Collapse
No announcement yet.

Windows-Form mit Parametern

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

  • Windows-Form mit Parametern

    Hallo Leute,

    ich habe ein Programm geschrieben, was Notizen verwaltet. Aufgebaut ist das ganze mit einer Textbox, die den Titel der Notiz anzeigt sowie einer Listbox, die die verschiedenen Notizen oder Stichpunkte darstellt. Weiterhin gibt es die Funktionen "Neue Notiz", "Notiz öffnen" und "Notiz speichern / speichern unter".

    Speichern und Öffnen habe ich über SaveFileDialog bzw. OpenFileDialog realisiert, die Notizen werden mit Titel in einer .txt-Datei gespeichert und können über den OpenFileDialog auch wieder im Programm geöffnet werden. Beim anlegen einer neuen Notiz kommt ein Dialogfenster, wo man den Titel eingeben kann. Dieser wird dann im "HauptDialog" in die TextBox übernommen. Soweit funktioniert auch alles prima.

    Ich möchte jetzt gerne, dass sich vor dem Öffnen des "HauptDialog" noch ein "AuswahlDialog" öffnet, in dem ich 3 Buttons habe (Notiz öffnen, Neue Notiz und direkt zur Anwendung). Soweit auch okay, das realisiere ich im Load-Event von HauptDialog:

    [highlight=c#]
    private void HauptDialog_Load(object sender, EventArgs e)
    {
    AuswahlDialog auswahlDialog = new AuswahlDialog();
    auswahlDialog.ShowDialog();
    }
    [/highlight]

    Nun komme ich zu der Stelle, wo ich nicht so recht weiter komme:
    Rufe ich im "AuswahlDialog" in der Click-Methode des Öffnen-Buttons die Öffnen-Methode aus dem "HauptDialog" auf, kann ich zwar die .txt - Datei zum Öffnen auswählen, die Daten werden aber in die Text- und ListBox nicht übernommen (Felder bleiben leer).

    So rufe ich die Methode auf:
    [highlight=c#]
    private void buttonListeÖffnen_Click(object sender, EventArgs e)
    {
    HauptDialog hauptDialog = new HauptDialog();
    hauptDialog.öffnenToolStripMenuItem_Click(sender, e);
    }
    [/highlight]

    Bei der Click-Methode für den Neu-Button das Gleiche. Ich bekomme den Dialog, um den Titel einzutragen, danach gelange ich wieder zu meinem "AuswahlDialog" und nicht in den "HauptDialog", wo ich eigentlich das eingegebene Thema in die TextBox übergeben haben möchte.

    Viel Text... Ich denke, ich übergebe irgendwo einen Parameter nicht richtig, leider weiß ich nicht direkt, welchen...

    Danke für eure Hilfe.

    Gruß,
    Jean

  • #2
    Du darfst schon gar nicht aus einem Child Formular auf das übergeordnete zugreifen. Die Steuerung muss das Hauptformular übernehmen.

    Comment


    • #3
      Zu deinem ersten Code. Versuche nie in einem Load Event einer Form eine andere Form anzuzeigen. Das Load Event trifft in einem relativ undefinierten(bzw. ungünstigen) Zustand der Form auf. In diesem Fall ist der Hauptdialog gerade dabei angezeigt zu werden. Ein vorheriges Fenster wird den Focus schon nicht mehr haben dein Hauptdialog ist aber noch nicht soweit ihn zu übernehmen und du kommst mit deinem AuswahlDialog in die Quere der den Focus ebenfalls will. Du wirst durch diese Art der Programmierung Probleme bei der Z-Order(also Anzeigereihenfolge auf dem Desktop) der Fenster bekommen. Entweder du zeigst den Auswahldialog vor dem Anzeigen des Hauptfensters an oder eben wenn das Hauptfenster fertig angezeigt wird(also z.B erst im Shown Event).

      Dein 2.ter Code macht keinen Sinn. Du erzeugst einen weiteren HauptDialog den du nicht anzeigst und rufst dort direkt eine Event Methode auf.
      a.) Du wolltest sicher nicht mehrere HauptDialog(e). Du wolltest wahrscheinlich den ursprünglichen Hauptdialog ansprechen. Für die direkte Kommunikation zwischen 2 Formen siehe die Folgebeiträge dieses Threads.
      b.) Du rufst direkt eine Eventmethode auf? Das ist auch nicht besonders geschickt. Wieso steckt da Code drin den du auch so von anderen Stellen aufrufen willst? Packe den Code in eine richtige Methode mit einer angemessenen Signatur (nicht Sender+EventArgs) und rufe diese dann von den Stellen auf wo du den Code benötigst. Wenn dieser Code sogar unabhängig von konkreten Daten des HauptDialogs ist packe in in eine eigene Klasse dann gibt es auch keinen Bedarf mehr das Auswahldialog auf Hauptdialog zugreift. Das Formen direkt miteinander sprechen ist eh immer die ungünstigste Wahl und sollte wenn möglich verhindert werden.

      Comment

      Working...
      X