Переключение назад и вперед между формами


Тема 1: переключение на другой формы проекта форма

Я использую следующий код, который вызывает экземпляр мой бланк для оплаты (frmPayment) от начальной формы (frmMainMenu), используя событие click:

Private Sub btnPayment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPayment.Click, PaymentToolStripMenuItem.Click
        Dim frmPaymentX As New frmPayment() 'declare payment form
        Me.Visible = False
        frmPaymentX.ShowDialog() 
End Sub

Я должен использовать нечто иное, чем мне.Видна = ложь в обработке моей начальной формы (frmMainMenu) во время моего форма переключатель?

Тема 2: переключение обратно в начальную форму

Кроме того, я использую следующий код, чтобы вернуться к своей начальной формы (frmMainMenu) у меня форма для оплаты (frmPayment):

Private Sub btnMainMenu_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles btnMainMenu.Click
        frmMainMenu.Show()
        Me.Close()
End Sub
  1. Должен ли я напрямую позвонить моей начальной формы (frmMainMenu) как я делаю в моем примере или мне следует звать экземпляр моей автозагрузки форма (frmMainMenu)?
  2. Я считаю, что я должен использовать показать() , а не метода showdialog() для этого. Это правильно?
  3. Я должен использовать нечто иное, чем мне.Закрыть()?


6220
3
задан 10 ноября 2011 в 03:11 Источник Поделиться
Комментарии
2 ответа

Во-первых, я думаю, нужно уточнить, почему вы хотите, чтобы показать форма оплаты и скрыть главную форму. В большинстве случаев, когда вы хотите показать диалоговое окно из описания, вы хотели показать ее модально (используя диалог.Метод showdialog()), чтобы она отображалась поверх текущей форме и позволяет пользователю взаимодействовать с другими до тех пор, пока открыто диалоговое окно не закрывается.

Во-вторых, если вы хотите, чтобы ваша нынешняя основная форма оплаты и диалога как двух экранах, а не форма и диалоговое окно, то вам может быть лучше создавать некоторые раковины форма, которая может содержать элемент управления UserControl. Вы можете затем строить основной формой оплаты и форма как две пользовательских элементов управленияи просто выключатель, который отображается на вашем окне.

1
ответ дан 11 ноября 2011 в 01:11 Источник Поделиться

Сокрытие вещь кажется мне немного странным. Вообще никто не заботится о скрытии главной формы. Если намерение состоит в том, чтобы переключиться между "страниц" в приложение, в панели вкладку или в стиле Мастера установки может быть лучшей идеей.

Как на ваш существующий код (вы должны держать его), в основной форме, я бы рекомендовал

Private Sub btnPayment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnPayment.Click, PaymentToolStripMenuItem.Click
' use `Using` here to ensure the subform is disposed when we're done.
' `Close` doesn't dispose forms shown via `ShowDialog`.
Using frmPaymentX As New frmPayment() 'declare payment form
Me.Hide() ' works like `Me.Visible = False`,but more OOPish IMO
frmPaymentX.ShowDialog()
Me.Show() ' duh
End Using
End Sub

В подчиненной форме...

Private Sub btnMainMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnMainMenu.Click
' (don't worry about controlling the main form here; it'll take care of itself)
Me.Close()
End Sub

Заметьте, все это при условии, что подчиненная форма действительно подчиненная форма (и, что первый , он же "основной" формы должны контролировать вещи). Если два логически независимых и одинаково в управления, затем вкладки или мастера, вероятно, будет лучше, в зависимости от того, какой подходит (который знаете только вы, так как мы не имеем UI в руки).

1
ответ дан 11 ноября 2011 в 04:11 Источник Поделиться