Benutzer mit den meisten Antworten
Verhindern das Startformular mehrfach geladen wird (StartupNextInstance)

Frage
-
Hallo Leute,
ich habe ein kleines Problem.
In meinem Programm muss ich ja ein Startformular immer angeben. Ferner habe ich das Programm als Einzelinstanz definiert und überprüfe mit dem StartupNextInstance-Ereignis den Mehrfachstart. So weit, so gut.
Aber wie kann ich das Laden des Startformulares denn verhindern?
Hier mein StartupNextInstance-Code:
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance Dim inputArgument As String = "/" Dim inputName As String = "" For Each s As String In e.CommandLine If s.ToLower.StartsWith(inputArgument) Then inputName = s.Remove(0, inputArgument.Length) End If Call MainLoadNotizen(CInt(inputName)) Next End Sub
Ich bin da etwas ratlos.
Danke schon einmal im voraus.
Gruß Ahmed
- Bearbeitet Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:11 Formatierung
Antworten
-
Hallo Ahmed,
wenn Du unter den Projekt-Einstellungen bei den Anwendungs Eigenschaften die Einstellung
"Einzelinstanzanwendung erstellen" aktivierst, so wird die Anwendung nur einmalig gestartet,
siehe Gewusst wie: Angeben des Instanziierungsverhaltens für eine Anwendung (Visual Basic)Gruß Elmar
- Als Antwort vorgeschlagen Giftzwockel Montag, 29. November 2010 17:57
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:11
-
Hallo Ahmed,
Skydrive kenne ich zwar nicht, aber ich habe mein Projekt einmal als ZIP auf Upload.to online gestellt:
mit Deiner Live ID für die MSDN Foren stehen Dir auf Skydrive 25 GB Speicherplatz zur Verfügung über die Du Dateien für andere freigeben kannst. Auch mit Zugriffsbeschränkung, Freigabe für bestimmte Live IDs etc. Aber andere Dienste gehen natürlich auch.
1. Es wird ein frmStart geladen und die Systray minimiert.
Dieses unwichtige und unwesentliche Detail erwähnst Du zum ersten Mal. Hier wird Dein Formular nicht mehrfach angezeigt, sondern es wird aus dem minimierten Status schlicht wiederhergestellt. Wenn das unerwünscht ist, kannst Du das im StartupNextInstance Ereignis über e.BringToFront = False verhindern:
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, _ ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs _ ) Handles Me.StartupNextInstance e.BringToForeground = False ' Dein weiterer Code ... End Sub
Das sollte es gewesen sein.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Giftzwockel Montag, 29. November 2010 17:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:11
Alle Antworten
-
Hallo Ahmed,
In meinem Programm muss ich ja ein Startformular immer angeben. Ferner habe ich das Programm als Einzelinstanz definiert und überprüfe mit dem StartupNextInstance-Ereignis den Mehrfachstart. So weit, so gut.
Aber wie kann ich das Laden des Startformulares denn verhindern?
wenn Du Deine Anwendung als Einzelinstanzanwendung definiert hast, erledigt VB dies eigentlich bereits automatisch und lädt kein zweites Mal Deine Anwendung bzw. das Startformular.
Hier mein StartupNextInstance-Code:
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance Dim inputArgument As String = "/" Dim inputName As String = "" For Each s As String In e.CommandLine If s.ToLower.StartsWith(inputArgument) Then inputName = s.Remove(0, inputArgument.Length) End If <br/> Call MainLoadNotizen(CInt(inputName)) <br/> Next End Sub
Ich kenne Deine Methode 'MainLoadNotizen' nicht. Aber ich vermute hier lädst Du das Startformular erneut, oder? Ansonsten kann ich in Deinem Code nicht erkennen, wo das Startformular erneut geladen werden sollte. Sonst kannst Du auch einen Haltepunkt in Form_Load bzw. im Konstruktor Deines Startformulars setzen, führst dieses in der IDE aus und startest die zweite Instanz über den Explorer (Anwendung im bin\debug Verzeichnis Deines Projekts). Dann kannst Du Dir die Aufrufliste (Callstack) anzeigen lassen und den Aufruf zurückverfolgen.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Thorsten,
nein, mein frmStart wird beim Programmstart automatisch geladen. Ich kann in den Einstellungen keine vernünftige andere Einstellung als
Anwendungstyp: Windows-Forms-Anwendung und
Startformular: frmStart definieren.
Und jetzt möchte ich einfach nicht, dass das Formular 'frmStart' erneut geladen wird.
Ich habe es auch irgendwie nicht hinbekommen, dass ich vernünftig alles über ein Sub-Routine Main() starte.
Gruß Ahmed
-
Hallo Ahmed,
wenn Du unter den Projekt-Einstellungen bei den Anwendungs Eigenschaften die Einstellung
"Einzelinstanzanwendung erstellen" aktivierst, so wird die Anwendung nur einmalig gestartet,
siehe Gewusst wie: Angeben des Instanziierungsverhaltens für eine Anwendung (Visual Basic)Gruß Elmar
- Als Antwort vorgeschlagen Giftzwockel Montag, 29. November 2010 17:57
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:11
-
Hallo Ahmed,
Das Formular 'frmStart' wird aber mehrfach geladen und das möchte ich unterbinden.
wenn Du so vorgegangen bist, wie Elmar beschrieben, liegt es definitiv an Deinem Code, der frmStart mehrfach lädt. Wenn Du allerdings das Anwendungsframework nicht verwendest, sondern Sub Main, funktioniert das mit der Einzelinstanzanwendung und dem StartupNextInstance Ereignis ohnehin nicht. Am einfachsten wäre ein reproduzierbares Beispielprojekt, das Du hier bereitstellst (via Skydrive).
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Skydrive kenne ich zwar nicht, aber ich habe mein Projekt einmal als ZIP auf Upload.to online gestellt:
Was macht mein Projekt:
1. Es wird ein frmStart geladen und die Systray minimiert.
2. Aus einer Access-DB sollen alle Desktop-Notizen in eigenständige Formulare auf den Desktop geladen werden. Das erfolgt nur einmal beim Systemstart.
3. Aus einem anderen Programm wird jetzt nach der Erstellung weiterer Notizen, mein Programm per Batchbefehl z.B. Notizen_Desktop /612 die neue DokId übergeben und es soll ein weiteres Notizformular geladen werden.
4. Dabei darf natürlich das frmStart nicht mehr angesprochen werden. Derzeit ist es aber so, dass das frmStart aus dem minimize erneut angezeigt wird.
Ich hoffe das ist etwas verständlicher.
Danke für die Hilfe.
Gruß Ahmed
P.S. Das Programm befindet sich noch im frühen Stadium. Das Grundsätzliche funktioniert aber einwandfrei.
- Bearbeitet Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:09 Hyperlink als Hyperlink
-
Hallo Ahmed,
Skydrive kenne ich zwar nicht, aber ich habe mein Projekt einmal als ZIP auf Upload.to online gestellt:
mit Deiner Live ID für die MSDN Foren stehen Dir auf Skydrive 25 GB Speicherplatz zur Verfügung über die Du Dateien für andere freigeben kannst. Auch mit Zugriffsbeschränkung, Freigabe für bestimmte Live IDs etc. Aber andere Dienste gehen natürlich auch.
1. Es wird ein frmStart geladen und die Systray minimiert.
Dieses unwichtige und unwesentliche Detail erwähnst Du zum ersten Mal. Hier wird Dein Formular nicht mehrfach angezeigt, sondern es wird aus dem minimierten Status schlicht wiederhergestellt. Wenn das unerwünscht ist, kannst Du das im StartupNextInstance Ereignis über e.BringToFront = False verhindern:
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, _ ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs _ ) Handles Me.StartupNextInstance e.BringToForeground = False ' Dein weiterer Code ... End Sub
Das sollte es gewesen sein.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Giftzwockel Montag, 29. November 2010 17:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Dezember 2010 10:11