0

我有一个多项目解决方案,其中一个项目是“主要”,启动项目。
从这个项目中,我开始在其他项目中启动表单,这些表单都在启动项目中被引用。

问题是我可以将这些表单作为这样的实例启动:

    Dim ka As New otherproject.frm_thatform
    With ka
        .BringToFront()
        .Show(Me)
    End With

每次都会打开新的“thatform”,但我想每次都像单个实例一样启动“thatform”,并且“thatform”出现在前面。

怎么做?

我尝试这样:

Dim ka As otherproject.frm_thatform
With ka
    .BringToFront()
    .Show(Me)
End With

...但这不起作用(对象引用未设置为对象的实例)。

4

3 回答 3

1

在您的原始代码中,将表单声明移到类(表单)级别:

Private ka As otherproject.frm_thatform = Nothing

然后检查它是否为 Nothing 或已被处置,并根据需要重新创建它:

If (ka Is Nothing) OrElse ka.IsDisposed Then
    ka = New otherproject.frm_thatform
    ka.Show(Me)
End If
If ka.WindowState = FormWindowState.Minimized Then
    ka.WindowState = FormWindowState.Normal
End If
ka.BringToFront()
于 2013-10-07T12:52:27.057 回答
1

几个选项 -

  1. 创建一个静态/共享表单变量
  2. 
    Shared form As SingletonformEx.Form1
    If form IsNot Nothing Then
        form.BringToFront()
    Else
        form = New SingletonformEx.Form1()
        form.Show()
    End If
    
  3. 扩展表单类并在其上实现单例模式。
  4. Public Class SingletonForm Inherits Form     
    
        Private Shared m_instance As SingletonForm    
    
            Private Sub New()
            'InitializeComponent();
            End Sub
    
            Public Shared ReadOnly Property Instance() As SingletonForm
                Get
                    If m_instance Is Nothing Then
                        m_instance = New SingletonForm()
                    End If
                    m_instance.BringToFront()
                    Return m_instance
                End Get
            End Property
        End Class
    
    注意:这是转换为 vb.net 的 C# 代码,所以我不确定这是否完美
于 2013-10-07T13:11:02.910 回答
1

诀窍是不要使表单变暗并将其用作共享对象。

Otherproject.frm_thatform.Show()
Otherproject.frm_thatform.BringToFront()

只要您不关闭此窗口,您就可以像调用 Dimmed 对象一样调用它。

而不是 ka 你只需输入 Otherproject.frm_thatform

一旦你关闭窗口,它就会失去里面的所有东西。

编辑:显然这仅适用于项目内的表单。我的错 :(

相反,您需要做的是在主项目中保留一个表单列表。

确保为表单命名,当您单击按钮打开表单时,只需遍历列表即可找到集合名称。

像这样的东西:

 Private FormList As New List(Of Form)
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim theForm As Form = Nothing
    For Each f As Form In FormList
        If f.Name = "Selected form name" Then
            theForm = f
        End If
    Next
    If theForm Is Nothing Then
        theForm = New Otherproject.frm_thatform()
        theForm.Name = "Selected form name"
        FormList.Add(theForm)
    End If
End Sub
于 2013-10-07T10:02:58.937 回答