【问题标题】:VB.NET Calling forms by VariableVB.NET 通过变量调用表单
【发布时间】:2015-06-03 11:22:16
【问题描述】:

我在 vb.net 中玩耍,想为我的应用程序创建一个菜单。该应用程序有一个 Main,它是 MDI Parent,然后具有在用户浏览菜单结构时打开的子表单。我想跟踪用户来自哪个表单,以便当他们关闭当前表单时,它会打开他们之前打开的表单。

到目前为止,我有一个公共变量“FormTracking”,它是一个表单列表。打开表单功能工作正常,但是当他们关闭表单并调用“OpenPreviousForm”函数时,它会失败,因为前一个表单已关闭/处置。我如何创建表单的新实例,因为调用“NEW”似乎不起作用

Public FormTracking As New List(Of Form)

Public Sub OpenForm(theNewForm As Object)
    'First Declare the new form
    Dim f As Form = DirectCast(theNewForm, Form)
    'Set the Forms parent
    f.MdiParent = frmMain2
    'Add the form to the tracking
    FormTracking.Add(theNewForm)
    'Show the form
    f.Show()
End Sub

Public Sub OpenPreviousForm()
    If modMenu.FormTracking.Count > 1 Then

        Dim f As New Form
        f = modMenu.FormTracking(modMenu.FormTracking.Count - 2)
        'Set the Forms parent
        f.MdiParent = frmMain2
        'Remove the last item
        modMenu.FormTracking.RemoveAt(modMenu.FormTracking.Count - 1)
        'Show the form
        f.Show()
    Else
        MessageBox.Show("Whoops, run out of forms.... ", "modMenu - OpenPreviousForm")
    End If
End Sub

打开它调用的表单时:

modMenu.OpenForm(menupage_1)
me.close

关闭表单时,我尝试调用

modMenu.OpenPreviousForm()

调用上述代码时遇到的错误是

"An unhandled exception of type 'System.ObjectDisposedExeption' occured in System.Windows.Forms.dll
Additional Information: Cannot access a disposed object

我知道我需要再次创建对象,但不确定如何使用上述功能。或者,如果有人可以提供更好的应用程序菜单方式,请随时告诉我。 干杯

【问题讨论】:

  • Dim f As New Form 不会创建特定表单的实例,而是所有表单都基于的通用基类。 Dim frm As New MainForm 其中“MainForm”是项目中的表单或类名。关键是每个表单都有自己的类或类型,因为它显示在每个表单的顶部:Public Class MainForm
  • @Plutonix 虽然是真的,但这不是异常的原因。这是由以下代码行引起的,该代码行将最后一个(已处理的)表单分配给 f。
  • @ZoharPeled 我正在回答第一部分中嵌入的明确问题How can i create a new instance of... Stephen,如果下一行为它分配了一个不同的实例,你也没有真正使用你的新表单实例:f = modMenu.Form...新实例正在被其他东西替换。
  • @Stephen:您需要在上一个状态下打开上一个表单,还是需要一个来自上一个表单类型的新表单?
  • 嗨@ZoharPeled,我很高兴打开表单的一个新实例,因为它是一个菜单结构,所以表单只包含按钮。

标签: vb.net forms


【解决方案1】:

使用Me.Hide 而不是Me.Close,这样您就不会丢弃该表单。

【讨论】:

  • 请注意,这将完全按照用户离开的方式显示以前的表单。虽然这可能是理想的结果,但它与 Stepen 对这个问题的最后评论相矛盾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多