Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB2010 - VB2015 | 01.03.18 |
Projekt mit anderer StartForm starten Der Tipp zeigt, wie man mittels Startparameter sein Projekt gesteuert mit einer anderen Startform starten kann. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 5.523 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Das Projekt muss dazu so eingestellt sein, dass Anwendungsframework aktivieren NICHT eingestellt ist. Dann kann das Projekt mit einer SUB Main gestartet werden. Mein Code der Sub Main sieht so aus:
''' <summary> ''' Description of Start. ''' </summary> Public Class Start <STAThread()> Public Shared Sub Main(ByVal args As String()) Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Dim aField() As String = {"/strtFrm="} Dim fField() As Form = {Form1, Form2, Form3, Form4, Form5, Form6, frmUnicodes, Form8, Form9, Form10, Form11} Dim fnField() As String = {Form1.Name, Form2.Name, Form3.Name, Form4.Name, Form5.Name, Form6.Name, frmUnicodes.Name, Form8.Name, Form9.Name, Form10.Name, Form11.Name} Dim idx As Short, nf As New Form ' Startparameter einstellen Dim clFeld As Array = ParseCommandLineArgs(aField) Dim sp() As String = Split(clFeld(0), "=") idx = fnField.IndexOf(fnField, sp(1)) nf = fField(idx) Application.Run(nf) End Sub End Class
Das bedeutet, dass in:
- "aField" die Bezeichnung des Startparameters gespeichert wird,
- "fField" die im Projekt vorhandenen/möglichen Formen selbst aufgeführt sind,
- "fnField" die Namen der in fField gespeicherten Formen stellungsbezogen aufgeführt sind.
Die Funktion ParseCommandLineArgs liest die Startparameter ein (in diesem Fall ist nur einer möglich lt. aField). Dann wird mittels Split der eigentliche Parameter (Formname) ermittelt und zur Festlegung der Startform verwendet. Die Application wird dann mit der ausgewählten Form gestartet.
Ich habe in meinem Testprojekt bspw. 11 verschiedene Formen, die ich mit Startparameter vor dem Start meines Programms auswählen kann.
(Wie im obigen Code ersichtlich.)
Hier noch der Code zur Funktion ParseCommandLineArgs:
''' <summary> ''' Commandline-Argumente lesen und übernehmen ''' </summary> ''' <param name="argField">Feld der Parameterbezeichnungen /bezeichnung=</param> ''' <returns>Feld mit den Werten?</returns> Public Function ParseCommandLineArgs(ByVal argField() As String) As Array Dim anz As Short = My.Application.CommandLineArgs.Count If anz = 0 Then ' sind Argumente vorhanden? Return Nothing ' nein Else Dim cmdFeld(anz - 1) As String ' ja Dim i As Short = 0 For Each s As String In My.Application.CommandLineArgs cmdFeld(i) = s i += 1 Next s Return cmdFeld End If End Function