| |

VB.NET - Ein- und UmsteigerRe: 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 |  |
 Formularname als String, dann Formular als Objekt zurückgebe... | 2.721 | Maggo13 | 20.03.14 11:20 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.943 | Maggo13 | 20.03.14 13:36 |    Re: Formularname als String, dann Formular als Objekt zurück... | 1.461 | Maggo13 | 08.05.14 12:55 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.560 | Manfred X | 20.03.14 16:02 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.613 | Maggo13 | 20.03.14 16:16 |    Re: Formularname als String, dann Formular als Objekt zurück... | 1.593 | Manfred X | 20.03.14 16:37 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.510 | Maggo13 | 20.03.14 17:11 |    Re: Formularname als String, dann Formular als Objekt zurück... | 1.514 | Manfred X | 20.03.14 18:14 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.606 | Maggo13 | 20.03.14 18:30 |    Re: Formularname als String, dann Formular als Objekt zurück... | 1.484 | jpmca | 21.03.14 23:49 |     Re: Formularname als String, dann Formular als Objekt zurück... | 1.495 | Maggo13 | 22.03.14 10:32 |   Re: Formularname als String, dann Formular als Objekt zurück... | 1.491 | powerzone3000 | 08.05.14 13:01 |    Re: Formularname als String, dann Formular als Objekt zurück... | 1.490 | Maggo13 | 08.05.14 13:34 |     Re: Formularname als String, dann Formular als Objekt zurück... | 1.454 | Maggo13 | 08.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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats TOP! Unser Nr. 1 
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|
|
|
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
|
|