根据另一个表单的当前位置设置窗体窗口位置

时间:2014-02-14 21:57:37

标签: vb.net winforms visual-studio-2010

我正在创建一个包含多个窗体的应用程序。主窗体是可移动的,我想要一个基于主窗体所在位置的闪存确认窗口。

例如,主窗体打开,用户将其拖动到左侧200点。按下按钮后,如何确保确认窗口完全打开到该窗口的左侧?

内置属性(中心屏幕,中心父级等)不提供此功能。

我知道这些功能:

Form1.Left += 200

Dim frmAccounts as new Form()
Set FrmAccounts.DesktopLocation = new Point(100,100)

但这些都没有考虑用户拖动。

有什么想法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

为了让好友粘在主窗体上,你必须使用主窗体的LocationChanged事件来知道何时移动它。而且你必须在它显示之前定位它,这有点棘手,因为这种形式可能会在具有不同DPI设置的机器上重新调整。最好的时间是当伙伴的Load事件触发时,它会被重新调整。一些示例代码:

Public Class Form1
  Dim buddy As Form

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If buddy Is Nothing Then
      buddy = New Form2
      AddHandler buddy.Load, AddressOf MoveBuddy
      AddHandler Me.LocationChanged, AddressOf MoveBuddy
      AddHandler buddy.FormClosed, Sub() buddy = Nothing
      buddy.Show(Me)
    End If
  End Sub

  Private Sub MoveBuddy(sender As Object, e As EventArgs)
    buddy.Bounds = New Rectangle(Me.Left - buddy.Width, Me.Top, buddy.Width, buddy.Height)
  End Sub
End Class