vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Formularname als String, dann Formular als Objekt zurückgeben.- Lösung 
Autor: Maggo13
Datum: 20.03.14 13:36

Ich hatte zwar schon lange gegoogelt gehabt bevor ich hier meine Frage stellte. Aber es hat mir weiterhin keine Ruhe gelassen und ich habe die Lösung gefunden. Kann man eigentlich immer mal brauchen, wenn man aktuellen FormularStand in einer Datei oder Datenbank ablegen möchte und dann wieder laden will.

Hier die gefundene Lösung:

    Public Sub ShowFormByName(ByVal FormName As String)
        ' Erzeugt eine neue Instanz einer Form auf Basis des
        ' Klassennamens der Form (z.B. "Form1") und zeigt
        ' diese neue Instanz an.
 
        Try
 
            ' Referenz auf die ausgeführte (diese) Assembly holen
            Dim myAssembly As System.Reflection.Assembly _
                            = System.Reflection.Assembly.GetExecutingAssembly()
 
            ' Den Namen der Assembly ermitteln:
            Dim strAssemblyName As String = myAssembly.GetName().Name.ToString
 
            ' Den kompletten Namen (inkl. Assemblynamen) des Form-Typs ermitteln
            ' (diese Zeile sorgt zudem für Toleranz bzgl. 
            ' Groß-/Kleinschreibung):
            Dim FullName As String _
                         = myAssembly.GetType(strAssemblyName & "." & FormName, _
                         False, True).ToString
 
            ' Form instanzieren und Formvariable zuweisen
            Dim myForm As System.Windows.Forms.Form _
                       = CType(myAssembly.CreateInstance(FullName),  _
                               System.Windows.Forms.Form)
 
            ' Die erzeugte Instanz anzeigen
            myForm.ShowDialog()
 
        Catch ex As System.NullReferenceException
 
            ' Formname existiert nicht - Standard: Keine Reaktion zeigen.
            ' Natürlich können Sie hier auch andere Reaktionen vorsehen.
 
        Catch ex As Exception
 
            ' Anderer Fehler, Fehlermeldung anzeigen.
            MessageBox.Show(ex.Message)
 
        End Try
 
    End Sub
Da ich bei meinem Programm mit dem DockContent von Weifenluo arbeite habe ich mir dies als Funktion umgeschrieben.

Ich benötige dies, wenn ich ein Layout über Loadxml lade und die Formulare entsprechend anzeigen lassen will.

Die Funktion sieht dann so aus:

    Private Function FormByName(ByVal FormName As String) As _
      WeifenLuo.WinFormsUI.Docking.DockContent
        ' Referenz auf die ausgeführte (diese) Assembly holen
        Dim myAssembly As System.Reflection.Assembly _
                        = System.Reflection.Assembly.GetExecutingAssembly()
 
        ' Den Namen der Assembly ermitteln:
        Dim strAssemblyName As String = myAssembly.GetName().Name.ToString
 
        ' Den kompletten Namen (inkl. Assemblynamen) des Form-Typs ermitteln
        ' (diese Zeile sorgt zudem für Toleranz bzgl. Groß-/Kleinschreibung):
        Dim FullName As String _
                     = myAssembly.GetType(strAssemblyName & "." & FormName, _
                     False, True).ToString
 
        ' Form instanzieren und Formvariable zuweisen
        'Dim myForm As System.Windows.Forms.Form _
        '           = CType(myAssembly.CreateInstance(FullName),  _
        '                   System.Windows.Forms.Form)
        Dim myForm As WeifenLuo.WinFormsUI.Docking.DockContent _
                   = CType(myAssembly.CreateInstance(FullName),  _
                           WeifenLuo.WinFormsUI.Docking.DockContent)
 
        Return myForm
    End Function
Wichtig hier natürlich der Typ:

As WeifenLuo.WinFormsUI.Docking.DockContent
Die Lösung so ist nur ein wenig langsamer, wie die umständliche in der Eingangsfrage. Dafür aber von der Programmpflege her besser.

Ich hoffe dies hilft auch einigen weiter, die Weifenluo nutzen. Ich finde dies extrem klasse um Fenster anzudocken usw.

Grüße
Marco
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Formularname als String, dann Formular als Objekt zurückgebe...2.721Maggo1320.03.14 11:20
Re: Formularname als String, dann Formular als Objekt zurück...1.943Maggo1320.03.14 13:36
Re: Formularname als String, dann Formular als Objekt zurück...1.461Maggo1308.05.14 12:55
Re: Formularname als String, dann Formular als Objekt zurück...1.560Manfred X20.03.14 16:02
Re: Formularname als String, dann Formular als Objekt zurück...1.613Maggo1320.03.14 16:16
Re: Formularname als String, dann Formular als Objekt zurück...1.593Manfred X20.03.14 16:37
Re: Formularname als String, dann Formular als Objekt zurück...1.510Maggo1320.03.14 17:11
Re: Formularname als String, dann Formular als Objekt zurück...1.514Manfred X20.03.14 18:14
Re: Formularname als String, dann Formular als Objekt zurück...1.606Maggo1320.03.14 18:30
Re: Formularname als String, dann Formular als Objekt zurück...1.484jpmca21.03.14 23:49
Re: Formularname als String, dann Formular als Objekt zurück...1.495Maggo1322.03.14 10:32
Re: Formularname als String, dann Formular als Objekt zurück...1.491powerzone300008.05.14 13:01
Re: Formularname als String, dann Formular als Objekt zurück...1.490Maggo1308.05.14 13:34
Re: Formularname als String, dann Formular als Objekt zurück...1.454Maggo1308.05.14 15:04

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel