Form in Panel richtig schliessen..?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Form in Panel richtig schliessen..?

    Hey Leute,

    ist eine Weile her. :D

    Wie kann ich, hört sich sicherlich blöd an, diese Frage, eine Form in meinem Panel richtig schliessen um sie erneut aufzurufen?
    Sollte ich in meiner im Panel geöffneten Form im Form.Closing Event agieren?
    Ich habe das Gefühl das ich nicht wirklich diese Form "weg" bekomme.

    Ich habe es schon mit Dispose versucht.
    Hier ein Auszug von meinem Aufruf, ggf. mache ich ja schon einen Fehler..

    VB.NET-Quellcode

    1. ​Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    2. Dim f As New Form2 With {.TopLevel = False, .AutoSize = False}
    3. 'Ist schon aufgeklappt?
    4. If Not ShowMore Then
    5. PictureBox1.Hide()
    6. PictureBox2.Hide()
    7. Do Until Me.Height = 400
    8. Me.Height += 1
    9. Me.Width += 1
    10. System.Threading.Thread.Sleep(1)
    11. Loop
    12. PictureBox1.Show()
    13. PictureBox2.Show()
    14. ShowMore = True
    15. 'Panel_Forms füllen
    16. Panel_Forms.Controls.Add(f)
    17. f.Show()
    18. Else
    19. PictureBox1.Hide()
    20. PictureBox2.Hide()
    21. Do Until Me.Height = 150
    22. Me.Height -= 1
    23. Me.Width -= 1
    24. System.Threading.Thread.Sleep(1)
    25. Loop
    26. PictureBox1.Show()
    27. PictureBox2.Show()
    28. ShowMore = False
    29. 'f.Dispose()
    30. 'f.close()
    31. 'Irgendwie klappt keines von beiden.
    32. End If
    33. End Sub


    Im ersten Schritt werden die Bilder ausgeblendet, meine Form vergrößert sich ein wenig, und anschließend wird das Panel angezeigt, bzw. die Form.
    Da mein Panel ja schon da ist, zeitgleich werden auch die Bilder wieder eingeblendet.
    Sollte die Hauptform schon größer dargestellt worden sein, soll er wieder das gleiche machen und anschließend die Form schließen.

    Weiß jmd. Rat?
    LG
    Option Strict On!

    Drahuverar schrieb:

    eine Form in meinem Panel
    Was meinst Du damit?
    Gugst Du hier.
    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 deine Zeit.

    Ich habe mal ein kleines Beispiel erstellt, welches mein Problem darstellen sollte.
    Ich hab "keine" Möglichkeit die Form in dem Panel zu schliessen...

    Hoffe mein "projekt" kann dir das besser erläutern als ich.. :/

    Grüße
    Dateien
    • FormExample.zip

      (88,54 kB, 181 mal heruntergeladen, zuletzt: )
    Option Strict On!

    Drahuverar schrieb:

    in dem Panel zu schliessen...
    Gib der Form einen von None verschiedenen FormBorderStyle oder einenn separaten Schließen-Button.
    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!
    Schade,
    ich kann also nicht in der Klasse "Form1" sagen das er dieses Fenster schliessen soll?

    Das mit dem "X" (schliessen, in kombination mit 'nem boolschen Wert) wollte ich schon machen, aber die Benutzer werden immer fauler, weswegen ich das generell vermeiden wollte.
    Option Strict On!

    Drahuverar schrieb:

    das er dieses Fenster schliessen soll?

    VB.NET-Quellcode

    1. f.Close()
    in einer entsprechenden Prozedur, dann musst Du Dir Deine Form-Instanzen unter einem geeigneten Namen in der Klasse merken.
    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!
    Genau, dass habe ich ja gemacht.
    Und trotzdem merkt mein Computer sich noch etwas.. und das verstehe ich nicht ganz.
    Ich greife in einer der Masken auf eine Windows-API und diese scheint irgendwie nicht wirklich beendet zu werden wenn ich "f.close" mache..
    Muss man bei Windows-APIs was anderes "beenden"?

    Danke
    Option Strict On!

    Drahuverar schrieb:

    Ich greife in einer der Masken auf eine Windows-API
    Mit welchem Code?
    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!

    Drahuverar schrieb:

    VB.NET-Quellcode

    1. Form3
    Mach mal nach dem f.Close() noch ein f.Dispose(). Danach sollte Ruhe im Karton sein.
    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!

    Drahuverar schrieb:

    Nicht mehr richtig initialisiert..
    Dann darfst Du diese Form nicht während der Kommunikation beenden.
    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!
    Okay. Verstehe ich auch.
    Denn da wo eine Verbindung besteht und nicht richtig beendet wird können solche Probleme entstehen.

    Aus diesem Grund habe ich

    VB.NET-Quellcode

    1. Private Sub ClosePreviewWindow()
    2. '
    3. ' Von Gerät trennen
    4. '
    5. SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, DeviceID, 0)
    6. '
    7. ' Schliesse Fenster
    8. '
    9. DestroyWindow(hHwnd)
    10. End Sub


    Bei dem Form_Closing Event eingebaut.
    Wird Form_Closing aktiviert wenn ich in Form1 "f.close" schreibe?
    Ich bin mal davon ausgegangen.
    ...habe schon einige Szenarien versucht.

    Hast du noch einen Hinweis?

    Vielen Dank.
    Option Strict On!
    generell:
    1. Man added keine Forms zu einem Form - ausser MDI.
      Nimm stattdessen evtl. ein UserControl.
    2. Man added auch keine Controls zur Laufzeit.
      Mach das UserControl im FormDesigner hin und gut ist. Dann kannste Visible True/False setzen
    3. Wenn die Umstellung Probleme mit dem Gerät erzeugt, dann stimmt was mit der Gerät-Ansteuerung nicht
    Hallo @ErfinderDesRades,

    Wieso macht man das nicht?
    :)
    ___________________________________________________
    EDIT:
    "Ein wieder verwendbares Windows Forms-Steuerelement."
    Heißt diese wird immer wieder auf "0" gesetzt, neu?
    ___________________________________________________

    Im Grunde adde ich doch kein Control,.. Korrigiere mich, wenn es so ist.
    ich habe ja alles schon im Designer parat, deswegen mag ich ja auch die Form in meinem Panel aufrufen.
    Da hab ich ja schon alles so schön parat gemacht.

    Grüße
    Option Strict On!

    Drahuverar schrieb:

    Wieso macht man das nicht?
    Form ist ein TopLevel-Control.
    Wie gesagt: nimm stattdessen UserControl. Hast du mal ein UserControl angeguckt?

    Drahuverar schrieb:

    EDIT:
    "Ein wieder verwendbares Windows Forms-Steuerelement."
    Heißt diese wird immer wieder auf "0" gesetzt, neu?
    Aha - aber was willst du damit sagen? Welche wird auf "0" gesetzt, neu, und was bedeutet "auf "0" setzen, neu"?

    Drahuverar schrieb:

    Im Grunde adde ich doch kein Control,.. Korrigiere mich, wenn es so ist.
    aus Form1 deines Uploads:

    VB.NET-Quellcode

    1. Dim f As New Form2 With {.TopLevel = False, .AutoSize = False}
    2. '...
    3. Panel1.Controls.Add(f)
    Angeguckt noch nicht, eben nur kurz in der IDE die Beschreibung wiedergegeben/gelesen.
    Mit "0" meine ich den Ursprungs zustand, den ich (gehe mal davon aus) in meinem vorgefertigten UserControl (Benutzersteuerelement) angegeben habe bzw. designt habe.
    Ist das so richtig interpretiert?

    aus Form1 deines Uploads​

    Okay, stimmt. Ich sage hier ja explizit "controls.add" - ich dachte da stünde nur add, wie bei einer ListBox. :rolleyes:

    Mit einem UserControl wäre dies evtl. möglich?
    Hast du evtl. einen Link zu einem vorhandenem Beitrag?

    Danke dir.
    Option Strict On!

    Drahuverar schrieb:

    deswegen mag ich ja auch die Form in meinem Panel aufrufen.
    Das ist logisch mit einem UserControl äquivalent, nur ist das UserControl dafür halt gemacht, mit der Form wird es immer ein Krampf.

    Drahuverar schrieb:

    Wird Form_Closing aktiviert wenn ich in Form1 "f.close" schreibe?
    Was muss man tun, um nicht im Forum fragen zu müssen und das trotzdem zu herauszukriegen? Gugst Du hier.
    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!
    @ErfinderDesRades
    "Klar" ist das schon.. Man muss es einmal gemacht haben um es völlig zu verstehen :whistling:
    Zumindest ist das bei mir der Fall, dass ich erst einmal diese Sache nachstellen muss um es zu verstehen..

    @RodFromGermany
    War mir nicht bewusst.. Aber ich bin mir sicher das ich mir mit mehreren UserControls viel Zeit und ärger sparen kann.
    Man bekommt es zwar immer angezeigt, geht aber nicht drauf ein. :D

    Ich werde diesen Thread nun schliessen,

    vielen Dank euch beiden.
    Option Strict On!