根据另一个表单的当前位置设置Windows窗体的屏幕位置

Sev*_*v09 1 vb.net visual-studio-2010 winforms

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

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

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

我知道这些功能:

Form1.Left += 200
Run Code Online (Sandbox Code Playgroud)

Dim frmAccounts as new Form()
Set FrmAccounts.DesktopLocation = new Point(100,100)
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

谢谢你的帮助.

Han*_*ant 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
Run Code Online (Sandbox Code Playgroud)