我试图将菜单上的所有控件向下或向上移动一个菜单栏的高度,具体取决于它是否可见。我有一些代码,我认为应该对此有用,但似乎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
答案 0 :(得分:2)
添加一个带控件的新处理程序,并在地址中更改位置
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
答案 1 :(得分:1)
试试这个:
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。
答案 2 :(得分:1)
正如Michael Todd指出的那样,Me.Controls不能为空。此外,这可能不像你想的那样有效。 WinForms应用程序的控件是分层的。 100%干净利落的唯一方法是使移动代码递归。 IE,对每个控件的控件集合中的每个控件执行相同的操作。 (现在我听起来像苏斯博士......)如果你的表格很简单,显然这不是问题。
但是,在一天结束时,您可能最好只将表格中的所有内容放在Panel中,然后只按名称显式移动Panel控件。这将使你想要做的更清楚。