2014-11-01 2 views
1

Предполагая, что я хочу, чтобы открыть Форму В из формы А, я использую следующий код в виде А:Как открыть окна формы в том же окне

FormB.Show() 

Me.Close() 

Это приводит к закрытию окна формы А и окно формы Б открытие. Это очень разрушительно, так можно открыть форму B в окне формы А? Я прочитал кое-что о MdiContainer, поэтому я сделал следующее:

-Создал новую Windows Form в Visual Studio, назвав ее MainForm и установив ее свойство isMdiContainer в True. -Используется следующий код при открытии Windows Forms:

FormB.MdiParent = MainForm 
FormB.Show() 

Me.Close() 

Но это приводит к FormB не появляется вообще.

Как это сделать?

--EDIT--

На основании приведенных ниже ответов, по-видимому, по общему мнению, чтобы исключить Me.Close(). Я сделал это, но кажется, что проблема не в Me.Close(), а в FormB.MdiParent = MainForm. По какой-то причине всякий раз, когда я включаю эту строку в функцию LoadB формы, FormB даже не появляется вообще.

+0

удалить Me.Close() – Creator

+0

_ "Но это приводит к тому, что FormB вообще не отображается." _ Это происходит потому, что, когда вы вызываете 'Me.Close()', который является методом FormA.Close() ', FormA (MainForm вашего приложения) автоматически отправляет сообщение FormB, также заказывая его, даже если вы не пишете этот код: «CloseReason.FormOwnerClosing». Вместо этого используйте Me.Hide(), если вы не хотите, чтобы ваше приложение заканчивалось преждевременно. –

ответ

2

Так у вас есть 2 формы, позволяет сказать "MainForm и Form1"

В Youre MainForm добавить код "Me.IsMdiContainer = True" в случае загрузки формы.
Чтобы установить MdiContainer в форму.

Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Me.IsMdiContainer = True 
End Sub 

И кнопка для открытия второй формы.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Form1.Show() 
End Sub 

Тогда в form1 loadevent добавить код "Me.MdiParent = MainForm"

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Me.MdiParent = MainForm 
End Sub 

Тогда это работает "и DonT называют Me.Close то закрыть форму."

+0

См. Мое редактирование :( – Wakka02

+0

@ Wakka02 Мой код работает .. создайте новую форму в своем проекте, а затем поместите код Me.MdiParent = MainForm в событие загрузки формы. "Затем откройте его", посмотрим, что произойдет. это проблема – Creator

0

Думаю, вы хотите показать обе формы за раз. то для этого не используйте метод .Close() для формы A. Ну есть еще одна вещь, если вы хотите, когда форму B вызывается формой A можно скрыть с помощью метода .Hide(). также вы можете сделать то же самое из дочерней формы, используя основной объект формы, чтобы показать основную форму и скрыть детскую форму.

0

От Forma, сделать что-то вроде:

FormB frmB = new FormB() 
frmB.MdiParent = Me 
frmB.Show() 

Не закрывать текущую форму с Me.Close()!

+0

См. мое редактирование :( – Wakka02

0

Вы можете использовать панель object как container для вашего нового form.

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