【问题标题】:Create a "stuck windows" application创建一个“卡住的窗口”应用程序
【发布时间】:2015-09-15 17:42:49
【问题描述】:

我正在创建一个 卡住的窗口 应用程序(如 TeamViewer 10),它应该如下所示:

但我有两个问题:

  • 首先,如果我在加载Form1 的过程中使用以下代码显示Form2,它首先显示Form2,然后是第一种形式。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Form2.Show()
    End Sub
    

所以我有这个,但这不是我想要的......

...但我找到了解决方案:我将Form2 设置为启动表单,然后在加载Form2 期间显示Form1有更简单或更合乎逻辑的方法吗?

  • 其次,当 2 个表单被加载时,我如何聚焦我的 Form1(主表单)? 现在,我有这段代码(它可以工作,但这样做有点奇怪这样……):

    Private Sub MainFormFocus_Tick(sender As Object, e As EventArgs) Handles MainFormFocus.Tick
        Form1.Focus()
        MainFormFocus.Stop()
    End Sub
    

MainFormFocus 对象是 Timer,其中 Enabled 属性设置为 TrueInterval 设置为 1。

上面的所有代码都有效,但有点棘手......这就是为什么我想以不同的方式来做。

【问题讨论】:

  • 您关注的是错误的问题。您需要订阅 LocationChanged 属性,以便正确定位另一个窗口。现在,哪个窗口是“第一个”不再重要了。
  • 对我来说,这很重要!
  • 如果在 Form1 的加载事件中显示 Form2,那么它自然会首先可见,因为 Form1 在加载事件完成之前是不可见的。您可以尝试在 Form1 的 OnFormShown 覆盖中显示 Form2。
  • @ChrisDunaway 我试试这个,谢谢!

标签: vb.net winforms


【解决方案1】:

感谢 Chris Dunaway,我的问题有了解决方案:

Protected Overrides Sub OnShown(e As EventArgs)
    MyBase.OnShown(e)
    Me.Location = New Point((My.Computer.Screen.WorkingArea.Width - (Me.Width + 5 + Form2.Width)) \ 2, Me.Location.Y)
    Form2.Show()
    Form2.Location = New Point(Me.Location.X + Me.Width + 5, Me.Location.Y)
    Me.Focus()
End Sub

上面的代码在我的Form1 中,它被重置为启动表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多