Перемещение элементов управления .NET во время выполнения - PullRequest
0 голосов
/ 04 июня 2010

Я пытаюсь переместить все элементы управления в форме вниз или вверх на высоту строки меню в зависимости от того, видна она или нет. У меня есть код, который, я думаю, должен хорошо работать для этого, однако кажется, что 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 ]

2 голосов
/ 01 ноября 2012

Добавить новый обработчик с управлением и изменить местоположение в адресе

 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 голос
/ 04 июня 2010

Как указывает Майкл Тодд, Me.Controls не может быть пустым. Кроме того, это может не сработать так, как вы думаете. Элементы управления в приложениях WinForms являются иерархическими. Единственный способ сделать это на 100% - сделать код перемещения рекурсивным. IE, выполните одну и ту же операцию для каждого элемента управления в коллекции элементов управления каждого элемента. (Сейчас я звучу как доктор Сьюз ...) Если ваша форма проста, это не будет проблемой, очевидно.

В конце концов, вам, вероятно, будет лучше просто поместить все в форму внутри Panel и просто переместить элемент управления Panel явно по имени. Это сделало бы то, что вы пытаетесь сделать, более ясным.

1 голос
/ 04 июня 2010

Попробуйте это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...