Получить первые 6 или 7 (условных) символов объекта - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь получить первые 6 или 7 символов объекта. Этот объект имеет имя объекта Panel, и я хочу передать эти символы другой переменной для работы с ними.

Это мой код.

Dim p1Name
Dim paParent
Dim clickedPanel

Private Sub ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click

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

    If Len(p1Name) = 7 Then
        paParent = clickedPanel.name
    Else
        paParent = clickedPanel.name.Substring(0, 7)
    End If

End Sub

Private Sub SwPan()

    Dim varE As String = paParent
    Dim PanelParent As Panel = paParent

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

Когда я пытаюсь запустить, отправьте следующее сообщение об ошибке.

index and length must refer to a location within the string parameter name length vb.net

Пожалуйста, не могли бы вы помочь мне исправить или направить меня?

Заранее спасибо.

Обновить я делаю следующее.

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

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

1 Ответ

0 голосов
/ 19 февраля 2020

Добрый день.

Извините за задержку, но я нашел решение этой проблемы.

Прикрепите обновленный код.

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

С уважением

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...