none
Form nur einmal erzeugen RRS feed

  • Frage

  • Hallo,
     
    ich möchte das ein nicht-modales Formular nur einmal erzeugt und geöffnet
    werden kann.
     
    Das sollte aber das Formular selber managen.
     
    Ich habe es mit einer Singleton-Klasse versucht, aber hier stört das
    dispose.
     
    Hat jemand eine Lösung?
     Danke.
     
     
    Montag, 12. November 2012 09:07

Antworten

  • Hallo,
    der Singleton geht schon. Das Dispose zerstört dein Objekt und die Information ist verloren. Nur der Dispose sollte dann halt am Ende der Application kommen.
    Anyway- VB.NET -  my.Application.OpenForms soll das enthalten was Du suchst.

    Grüße Alexander

    Montag, 12. November 2012 10:12
  • Hallo umocomp1,

    theoretisch kann man den Zugriff auf das Formular über eine Faktory realisieren und nach außen nur die Schnittelle IMeinFormular bereitstellen. So das nur über die Faktory ein Formular erzeugt werden kann, b.z.w. sie die vorhandene Instanz des Formulars zurück gibt (Was Indirekt eine Singelton Implementierung ist).

    Grundlegen möchte ich dir aber davon Abraten ein Formular als Singelton zu erzeugen. Du musst hier wirklich darauf achten dass nur aus einem Thread auf die Form zugegriffen wird. Da es sonst zum Absturz des Programme kommen kann.

    Einfach mal "Singelton Evil" oder "Bad" in google eingeben 

    Wenn du Erläuterst wie so es nur eine Instanz geben soll kann man vielleicht eine Lösung finden.  

    MFG

    Björn

    Montag, 12. November 2012 10:27
  • Hallo, ich hätte noch einen Vorschlag ohne Singleton usw...

    Du musst nur eine Instanz deiner ChildForm erstellen, diese in deiner MaiNForm die ganze Zeit behalten und bevor du Sie anzeigst abfragen ob Sie sichtbar ist:

    Private frm2 As Form2 = Nothing
    
    Private Sub button1_Click(sender As Object, e As EventArgs)
    	If frm2 Is Nothing OrElse Not frm2.Visible Then
    		frm2 = New Form2()
    		frm2.Show()
    	End If
    End Sub
    Wenn die Form Natürlich nur mit Hide() ausgeblendet wird, dann ist Sie natürlich auch nicht Sichtbar, dafür könntest du dir dann aber eine eigene Eigenschaft in ChildForm erstellen.


    Koopakiller - http://koopakiller.ko.ohost.de/


    Montag, 12. November 2012 14:31
    Moderator

Alle Antworten

  • Hallo,
    der Singleton geht schon. Das Dispose zerstört dein Objekt und die Information ist verloren. Nur der Dispose sollte dann halt am Ende der Application kommen.
    Anyway- VB.NET -  my.Application.OpenForms soll das enthalten was Du suchst.

    Grüße Alexander

    Montag, 12. November 2012 10:12
  • Hallo umocomp1,

    theoretisch kann man den Zugriff auf das Formular über eine Faktory realisieren und nach außen nur die Schnittelle IMeinFormular bereitstellen. So das nur über die Faktory ein Formular erzeugt werden kann, b.z.w. sie die vorhandene Instanz des Formulars zurück gibt (Was Indirekt eine Singelton Implementierung ist).

    Grundlegen möchte ich dir aber davon Abraten ein Formular als Singelton zu erzeugen. Du musst hier wirklich darauf achten dass nur aus einem Thread auf die Form zugegriffen wird. Da es sonst zum Absturz des Programme kommen kann.

    Einfach mal "Singelton Evil" oder "Bad" in google eingeben 

    Wenn du Erläuterst wie so es nur eine Instanz geben soll kann man vielleicht eine Lösung finden.  

    MFG

    Björn

    Montag, 12. November 2012 10:27
  • Hallo, ich hätte noch einen Vorschlag ohne Singleton usw...

    Du musst nur eine Instanz deiner ChildForm erstellen, diese in deiner MaiNForm die ganze Zeit behalten und bevor du Sie anzeigst abfragen ob Sie sichtbar ist:

    Private frm2 As Form2 = Nothing
    
    Private Sub button1_Click(sender As Object, e As EventArgs)
    	If frm2 Is Nothing OrElse Not frm2.Visible Then
    		frm2 = New Form2()
    		frm2.Show()
    	End If
    End Sub
    Wenn die Form Natürlich nur mit Hide() ausgeblendet wird, dann ist Sie natürlich auch nicht Sichtbar, dafür könntest du dir dann aber eine eigene Eigenschaft in ChildForm erstellen.


    Koopakiller - http://koopakiller.ko.ohost.de/


    Montag, 12. November 2012 14:31
    Moderator
  • Hallo umocomp1,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 26. November 2012 10:26
    Moderator