0

我需要一种形式作为单实例形式。
这是一种“工具形式”,我不能用 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...

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

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

4

3 回答 3

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...
于 2013-09-05T10:43:15.297 回答
0

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

With frm_iemail()

您正在尝试在无法使用的 With 语句中使用表单数组。取下最后的支架,它应该可以工作。

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

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

我可以简单地这样做:

With frmTest
    .FormBorderStyle = Windows.Forms.FormBorderStyle.None
    .Show
End With
于 2013-09-05T10:37:18.960 回答
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
于 2013-09-05T12:02:51.890 回答