2016-06-10 6 views
0

Öffnung habe ich 3 bildetOpen 2 MDI Elternteil nach dem Hauptmenü Form

  1. geordneten MDI für TCP-Client
  2. geordneten MDI für die serielle
  3. Das Hauptmenü Form

Ich möchte Um das Hauptmenü-Formular als Startup-Formular festzulegen, möchte ich, dass das 2-MDI-Elternelement in den Hintergrund geladen wird. Ich will sie nicht zeigen, aber ich will sie laden, also kann ich das on_load-Ereignis dieser 2 mdi Eltern auslösen, die serial/client-Kind erstellen und automatisch verbinden soll.

Ich habe es versucht, aber es hat nicht funktioniert.

Private Sub frmMenu_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    frmTcpMDI.show 
    frmSerialMDI.show 
End Sub 

Ich habe sogar versucht, einen Timer dann starten sie auf die Show-Veranstaltung meiner Startformular hinzufügen, ist die Zecke Ereignis meine frmTcpMDI und frmSerialMDI, noch zu öffnen, ist es nicht funktioniert.

+0

wenn Sie vielleicht Ich will sie nie zeigen, sie müssen nicht "Formen" sein, sondern nur Klassen. Ich verstehe nicht genau, was Sie erreichen wollen, können Sie nicht die Verbindung in den 'Sub New()' Methoden der Formulare starten? –

+0

Ich möchte nur ihren Prozess beim Start starten, es gibt Zeiten, die der Benutzer sehen muss, was in diesen MDI-Eltern ist, so dass ich sie nicht nur in Klassen ändern kann, weil sie auch Informationen enthalten, die meine Benutzer sehen möchten. –

+0

Was kann etwas funktionieren, ist eine normale Ladung ('New()', dann 'Show()') und im 'Load'-Ereignis der Formulare, die Sie' Me.Hide() 'nennen ... Aber es ist nicht gut übe ich denke ... –

Antwort

0

Okay, im Grunde, wenn ich verstehe, was Sie wollen, müssen Sie Ihre Formulare laden, aber nicht anzeigen.

Sie möchten Code ausführen, wenn das Load-Ereignis auftritt. Wie jedoch stated here von Microsoft:

Tritt auf, bevor die Steuerung zum ersten Mal sichtbar wird.

die im Grunde Schrauben Sie oben ...

So gibt es ein paar Abhilfe dafür.

Option 1: Sie entscheiden, Ihren Code in der Sub New()

laufen Wenn Sie den gesamten Code setzen Sie in der Sub New() Ihres Kindes Formen ausführen möchten, müssen Sie nicht Form.Show() rufen Sie Sie müssen nur die Formulare erstellen und der Code wird ausgeführt. Wenn Sie das Formular tatsächlich anzeigen müssen, rufen Sie die Methode Show() auf und es ist fertig.

Option 2: Sie können den Code in den Sub New()

Wenn aus irgendeinem Grunde nicht ausgeführt, Sie nicht Ihr Stück Code in den Sub New() Verfahren ausführen können, können Sie es immer noch tun mit der Ereignis laden Verstecke einfach das Formular, nachdem du es gezeigt hast ... Sieht dumm aus, wird aber funktionieren.

Erste Ankündigung, noch von Microsoft:

Das Load-Ereignis tritt ein, wenn der Griff für die Usercontrol erstellt wird. In einigen Fällen kann dies dazu führen, dass das Load-Ereignis mehr als einmal auftritt. Beispielsweise tritt das Load-Ereignis auf, wenn das UserControl geladen wird, und erneut, wenn das Handle neu erstellt wird.

Was bedeutet, dass Sie vorsichtig sein müssen, Ihren Code nur einmal auszuführen ...

Dann von einem Elternteil:

Dim myNewForm = new frmTCPMdi() 
myNewForm.Show()'will call the Load event 
myNewForm.Hide()'will hide the form, so it is loaded but invisible... 

Glück unwichtig, ich glaube Option 1 sieht besser aus, aber manchmal und aus irgendeinem Grunde kann man nicht immer den einfachen Weg gehen ...

Verwandte Themen