2016-06-10 2 views
0

У меня есть 3 формыOpen 2 MDI Parent после открытия главного меню формы

  1. MDI родитель для TCP клиента
  2. MDI родитель для последовательного
  3. Основной формой меню

Я хочу чтобы установить форму главного меню как startupform, тогда я хочу, чтобы родительский родитель MDI был загружен на задний план. Я не хочу их показывать, но я хочу загрузить их, чтобы я мог инициировать событие on_load из этих 2 mdi-родителей, который должен создать дочерний файл serial/client и автоматически подключиться.

Я пробовал, но это не сработало.

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

Я даже пытался добавить таймер затем запустить его на шоу случае моей формы запуска, событие клеща открыть мой frmTcpMDI и frmSerialMDI, до сих пор, она не работает.

+0

Может быть, если вы никогда не хотят показывать их, им не нужно быть «Формами», а просто классами. Я не совсем понимаю, чего вы хотите достичь, не можете ли вы начать соединение в методах 'Sub New()' форм? –

+0

Я хочу только начать процесс при запуске, иногда пользователю нужно посмотреть, что внутри этих родителей MDI, поэтому я не могу изменить их только на классы, потому что они также содержат информацию, которую мои пользователи хотят видеть. –

+0

В чем-то может работать нормальная загрузка ('New()' then 'Show()') и в событии 'Load' форм, которые вы называете' Me.Hide() '... Но это не хорошо практика, я думаю ... –

ответ

0

Хорошо, если я понимаю, что вы хотите, вам нужен способ загрузить ваши формы, но не отображать их.

Вы хотите запустить код при возникновении события загрузки. Однако, как stated here от Microsoft:

Происходит, прежде чем управление станет видимым в первый раз.

, которые в основном шурупы вас ...

Итак, есть несколько обходной путь для этого.

Вариант 1: Вы решили запустить свой код в Sub New()

Если поместить весь код, который вы хотите запустить в Sub New() ваших дочерних форм, вам не нужно вызывать Form.Show(), вы просто нужно создать формы, и ваш код работает. Когда вам действительно нужно отобразить форму, вы вызываете метод Show(), и все сделано.

Вариант 2: Вы не можете запустить свой код в Sub New()

Если по какой-то причине, вы не можете запустить свой кусок кода в методе Sub New(), вы можете сделать это с загрузить событие. Просто спрячьте форму, показывая ее ... Выглядит глупо, но будет работать.

Первое уведомление, до сих пор от Microsoft:

Событие Load происходит при создании ручки для UserControl. В некоторых случаях это может привести к возникновению события Load более одного раза. Например, событие Load возникает при загрузке UserControl и снова при воссоздании дескриптора.

Это означает, что вы должны быть осторожны, чтобы запускать код только один раз ...

Тогда из ваших родителей:

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

Honnestly, я думаю, что вариант 1 выглядит лучше, но иногда и по каким-то причинам вы не можете всегда идти легкий путь ...

Смежные вопросы