非mdi应用程序中的非模态形式的单个实例

时间:2013-09-05 10:32:14

标签: vb.net

我需要一个表单作为单个实例一 这是一种“工具形式”,我不能用NEW启动它,因为它忘记了用户输入。 但是,在那种形式中,我有Sub New,我初始化了一些所需的东西。

如果我从主表单中调用此表单,请执行以下操作:

With frm_iemail()
    .StartPosition = FormStartPosition.Manual
    .FormBorderStyle = Windows.Forms.FormBorderStyle.None
    .Show(Me)
End With

我收到错误:

  

'frm_iemail'是一种类型,不能用作表达式。

但如果我这样称呼它:

Dim eform As New frm_iemail()
With eform
etc...

然后没有错误,但在文本框中输入的文本将被删除不需要的内容。

在这里做些什么来获得所需的功能?

3 个答案:

答案 0 :(得分:1)

如果您想使用已经处于活动状态的表单,则可以使用以下方法获取活动表单的对象。

Private Function GetActiveEmailForm() As frm_iemail

    For Each lForm In System.Windows.Forms.Application.OpenForms
        If (lForm.Name = frm_iemail.Name) Then
            Return lForm
        End If
    Next

    Return New frm_iemail

End Function

主要代码就是这样。

Dim eform As frm_iemail = GetActiveEmailForm
With eform
etc...

答案 1 :(得分:0)

(我认为)你的问题是这一行:

With frm_iemail()

您正在尝试在With语句中使用表单数组,该语句不起作用。删除末尾的括号,它应该可以工作。

在VB中,您只需引用表单的名称(您不必声明表单变量来使用它)

所以说我有一个表单名称frmTest

我可以这样做:

With frmTest
    .FormBorderStyle = Windows.Forms.FormBorderStyle.None
    .Show
End With

答案 2 :(得分:0)

Private eform As New frm_iemail()添加到调用类或表单(您将其称为“主窗体”),而不是在方法中,而是作为实例数据。这样它只会被创建一次。像这样:

Class MainForm : Form

   Private eform As New frm_iemail()


   Public Sub ExampleMethod()

      With eform
         .StartPosition = FormStartPosition.Manual
         .FormBorderStyle = Windows.Forms.FormBorderStyle.None
         .Show(Me)
      End With

   End Sub

End Class