larkino Ответов: 1

Как переместить объект между панелями? (Глаг


Привет, команда.

Я пытаюсь переместить объект типа панели (дочерняя панель), который находится внутри другого объекта типа панели (родительская панель а), на другую панель (родительская панель б), эти панели были созданы динамически.
Я знаю, что в этом случае необходимо получить объект-отправитель родительских панелей и даже там все хорошо, когда я перемещаю дочерний объект внутри его родительской панели, это делается без проблем, но когда я пытаюсь переместить его между родительскими панелями, он не выполняет никаких действий . Можете ли вы помочь мне показать, где моя ошибка? Я приложил сгенерированный код.

Заранее благодарю вас и приложенные усилия.

Что я уже пробовал:

Это для того, чтобы получить (вырезать)

Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click

    clickedPanel = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)

p1Name = clickedPanel.Name

    paParent = clickedPanel.parent

End Sub



Это нужно сделать (вставить)
Private Sub ToolStripMenuItem4_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem4.Click
    clickedPanel = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)

    p2Name = clickedPanel.Name

    pbParent = clickedPanel.parent

    Call Swap()

End Sub


Это делается для того, чтобы произвести обмен.

Private Sub Swap()

        '' build the panel names
        Dim varA As String = p1Name.ToString
        Dim varC As String = p2Name.ToString

        Dim PanelParent As Panel = paParent
        Dim PanelParent_b As Panel = pbParent

        Dim p3 = DirectCast(PanelParent.Controls.Find(p1Name, True).FirstOrDefault(), Panel)
        If p3 Is Nothing Then Throw New ArgumentException("index1")

        Dim p4 = DirectCast(PanelParent_b.Controls.Find(p2Name, True).FirstOrDefault(), Panel)
        If p4 Is Nothing Then Throw New ArgumentException("index2")

        Dim positionA As Integer = Panel1.AutoScrollPosition.X

        Panel1.AutoScroll = False

        Dim temp = p4.Location
        p4.Location = p3.Location
        p3.Location = temp

        Panel1.AutoScroll = True

        Panel1.AutoScrollPosition = New Point(positionA, Panel1.VerticalScroll.Maximum)

    End Sub


Попробуйте сделать и это тоже.
p3.Location = New Point(p3.Location.X, p3.Location.Y)
PanelParent.Controls.Add(p3)
p4.Location = New Point(p4.Location.X, p4.Location.Y)
PanelParent_b.Controls.Add(p4)

1 Ответов

Рейтинг:
6

larkino

Хороший день.

Я нашел решение, приложил код.

Спасибо вам всем за потраченные усилия и время.

С уважением.


Private Sub Swap()

    Dim PanelParent As Panel = paParent
    Dim PanelParent_b As Panel = pbParent

    Dim p3 = DirectCast(PanelParent.Controls.Find(p1Name, True).FirstOrDefault(), Panel)
    If p3 Is Nothing Then Throw New ArgumentException("index1")

    Dim p4 = DirectCast(PanelParent_b.Controls.Find(p2Name, True).FirstOrDefault(), Panel)
    If p4 Is Nothing Then Throw New ArgumentException("index2")

    Dim positionA As Integer = Panel1.AutoScrollPosition.X

    Panel1.AutoScroll = False

    Dim temp = p4.Location
    Dim temp_b = p3.Location

    With p3
        .Parent = PanelParent_b
        .Location = temp
    End With

    With p4
        .Parent = PanelParent
        .Location = temp_b
    End With

    Panel1.AutoScroll = True

    Panel1.AutoScrollPosition = New Point(positionA, Panel1.VerticalScroll.Maximum)

End Sub