2013-11-21 3 views
0

Есть ли способ сделать следующее, кроме скрытия, а затем закрыть скрытую форму позже?Открытая форма как ShowDialog, но закрывающая форма приглашения

Mainform открывает SecondForm как диалог показа, мне нужно открыть ThirdForm из SecondForm, закрывая SecondForm, сохраняя третью форму, действующую как «showdialog» на MainForm?

+1

вам нужно будет описать, что вы пытаетесь сделать немного лучше. –

+0

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

ответ

2

Когда вы показываете SecondForm(), проходят в MainForm() в качестве владельца к ShowDialog():

Public Class MainForm 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim sf As New SecondForm 
     If sf.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then 
      ' ... do some processing in here ... 
     End If 
    End Sub 

End Class 

Теперь, в SecondForm(), вы можете установить владельца ThirdForm() в том, что из SecondForm():

Public Class SecondForm 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Me.Hide() 
     Dim tf As New ThirdForm 
     tf.ShowDialog(Me.Owner) 
     Me.DialogResult = Windows.Forms.DialogResult.OK 
    End Sub 

End Class 
+0

Что делает эта линия? Me.DialogResult = Windows.Forms.DialogResult.OK Мне нужно беспокоиться о закрытии me.hide() где-то ??? – gbb116

+0

Настройка DialogResult() - это то, что позволяет исполнению вернуться к строке ShowDialog(), которая первоначально отобразила этот диалог. Это значение фактически возвращается в ShowDialog(), и вы можете проверить его, чтобы увидеть, было ли возвращено «OK». Если вы вернете «Отмена», ваш код может пропустить обработку. Я обновлю код на примере. –

1

Вы можете просто открыть третью форму из главной формы, как только вторая форма возвращает диалоговый результат

Вы также можете захотеть взглянуть на MDI это дает вам больше Contro л над тем, что пользователь может и не может сделать.

0

После попытки предложения Idle_mind это все еще давало мне проблемы, идущие вперед и назад между формами, постоянно показывающими их как .showdialog. Я решил свою проблему так же, как предложил tinstaafl. Хотелось бы, чтобы у меня появилось его сообщение, прежде чем пару часов попробовать разные методы, прежде чем приступать к этому.

Когда я закрываю каждую форму, я устанавливаю булевский флаг в основной форме. то я вызываю sub, который находится в основной форме, чтобы показать следующую форму как showdialog из основной формы. Я использую флаг, который запускает логику в форме im, загружая, привязывать ли данные из datatable или нет, поэтому я могу ее редактировать.

Извините, что все эти формы я знаю, что это запутывает. чтобы подвести итог, закройте диалоговую форму (me.close), установите флаг, чтобы код вызова знал, что делать, как только код showdialog будет выполнен.

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