【问题标题】:Setting visible from false to true make program start again将可见从假设置为真使程序重新启动
【发布时间】:2014-12-18 09:39:43
【问题描述】:

我有两个 VB.NET 项目(win32 形式)

1. 第一个应用程序用于与用户直接交互。它可以选择从复选框激活我的实时引擎。

2. 实时引擎(Windows 启动时在后台运行的表单),但它也有复选框,所以当我直接从 p.#1 打开它时,它应该是可见的。此表单由 p#1 导入。

所以,我希望当从项目#1 的按钮打开项目#2 时,它是可见的(因为它有其他选项),而当它从窗口开始时,它是不可见的。到现在为止都还好,但是……

当项目 #2 已经运行时,如果我使用上面的代码从项目 #2 启动它,它将再次触发加载事件,并且在 taskmanager 中将运行 两个相同的进程。我只想要

当我将上面的代码运行为 VISIBLE 时,NOT 在新实例中再次运行。

来自 p#2 的代码,从 p#1 调用。

 Public Sub formsetup()

        If normalwindow = True Then
            Me.Size = New Size(466, 459)
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
            Me.Opacity = 100
            Me.ShowInTaskbar = True
            Me.ShowIcon = True
            Me.ControlBox = True
            Me.Visible = True

        Else
            Me.Size = New Size(0, 0)
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
            Me.Opacity = 0
            Me.ShowInTaskbar = False
            Me.ShowIcon = False
            Me.ControlBox = False
            Me.Visible = False
            ' Panel1.Dispose()
            ' TextBox2.Dispose()

        End If
        Application.DoEvents()
    End Sub

看来me.visible = true 操作是来自 p#2 的加载事件再次触发的原因。

我再说一遍,我只想在 p#2 的内存中一个实例,当我单击 p#1 中的按钮时,p#2 只是 可见在新窗口中再次加载。

谢谢。

【问题讨论】:

  • 您应该显示第一个应用程序访问第二个应用程序的部分。如果这些确实是 2 个不同的应用程序,那就更清楚了。
  • Public Sub 在 App #2 中。我从 App #1 访问它。例如,在 app#1 的 Button1_click 上,使应用程序 2 可见(默认情况下它是不可见的)我写 APP2.normalwindow = true APP2.formsetup() 。现在,是 APP#2 的 Load 事件再次触发并在新实例中启动的时候了。代码 Me.visible = true 是原因,但为什么呢?我怎样才能让它可见而无需重新开始?第一个应用程序是 WPF 表单。第二个是Winform。我不认为它应该那么重要,不是吗?制作单实例应用程序复选框也已启用。
  • 因为代码 me.visible = true 与代码 form2.show() 或 form2.showdialog() 等价?这就是为什么我的 App2 表格重新开始的原因?如果是,我还能做什么?我再说一遍,App2 从 Windows 启动并且在我从 App1 button1 手动启动之前是不可见的。那么它应该只是 Visible 不启动它的新实例。如果我在 App1 中编写代码 APP2.FORM2.VISIBLE = TRUE 是相同的错误......它再次开始

标签: vb.net winforms visible


【解决方案1】:

在您的 P#2 应用程序属性中,选中“制作单实例应用程序”复选框。

现在,由于您正在设置表单Visible = False,当它再次被激活时,它仍然不可见。为了解决这个问题,我们需要覆盖应用程序事件下的OnStartupNextInstance(单击从项目属性中查看应用程序事件)

Protected Overrides Sub OnStartupNextInstance(ByVal e As StartupNextInstanceEventArgs)
        MyBase.OnStartupNextInstance(e)
        MyBase.MainForm.Visible = True`
End Sub

希望这是你想要的。

编辑:请注意,提到的事件是在应用程序本身的第一个实例中引发的,而不是在尝试启动的新实例中引发的,因此不会再有任何加载的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多