代码之家  ›  专栏  ›  技术社区  ›  Caleb Hearth

在运行时移动.NET控件

  •  0
  • Caleb Hearth  · 技术社区  · 14 年前

    我试图根据菜单栏的高度将窗体上的所有控件下移或上移,具体取决于它是否可见。我有代码,我认为应该很好地解决这个问题,但似乎 Me.Controls 在运行时是空的,所以我的 for each 循环从未进入。有人能给我一个关于如何移动控制装置的建议吗?

    Private Sub uxMenuStrip_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles uxMenuStrip.VisibleChanged
        For Each control As Control In Me.Controls
            If control.Name <> "uxMenuStrip" Then
                Dim temp As AnchorStyles = control.Anchor
                control.Anchor = AnchorStyles.None
                control.Top -= ((CInt(uxMenuStrip.Visible) * 2 - 1) * uxMenuStrip.Height)
                control.Anchor = temp
            End If
        Next
        Me.Height += ((CInt(uxMenuStrip.Visible) * 2 - 1) * uxMenuStrip.Height)
    End Sub
    
    3 回复  |  直到 12 年前
        1
  •  1
  •   Tim Coker    14 年前

    正如迈克尔·托德指出的,我。控制装置不能是空的。而且,这可能不会像你想的那样奏效。WinForms应用程序上的控件是分层的。唯一一个彻底做到这一点的方法是使移动代码递归。即,对每个控件的控件集合中的每个控件执行相同的操作。(现在我听起来像是修斯博士……)如果你的表格很简单,这显然不是问题。

    不过,在一天结束的时候,最好将窗体上的所有内容都放在面板中,并按名称显式地移动面板控件。这会让你想做的更清楚。

        2
  •  2
  •   gnat Nat Poor    12 年前

    添加一个新的处理程序,并在地址中更改控件和位置

     Public Sub ChngPostion(ByVal sender As System.Object, ByVal e As System.EventArgs)
          For Each cntrl As Control In Me.Controls
             If cntrl.Name = sender.Name Then
                 cntrl.Location = New System.Drawing.Point(sender.Location.X,sender.Location.Y)
             End If
          Next
     End Sub
    
        3
  •  1
  •   max    14 年前

    试试这个:

    Private Sub uxMenuStrip_VisibleChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles uxMenuStrip.VisibleChanged
        Dim menu As Control = sender
        Dim dh As Integer = IIf(menu.Visible, 1, -1) * menu.Height
        For Each control As Control In Controls
            If control.Parent Is Me And Not control Is menu Then
                control.Top += dh
            End If
        Next
        Height += dh
    End Sub
    

    更新: 无论如何,我强烈建议使用容器,以防使用menustrip-toolstripcontainer。