#vb.net #panel
#vb.net #панель
Вопрос:
У меня есть панель, которая, в свою очередь, имеет несколько панелей внутри, и они генерируются динамически, что я делаю, так это то, что с помощью события мыши у меня есть меню, которое позволяет мне менять позиции одной панели на другую, то есть, если я хочу поменять местами панелипри использовании PanelB PanelB занимает позицию PanelA, а PanelA — PanelB, пока проблем нет.
Деталь, которая у меня есть, заключается в экспорте информации о коллекции дочерних панелей на лист Excel, они отображаются в том виде, в каком они были созданы, я полагаю, что по его Tabindex, и я хочу, чтобы, если позиция обмена панели с другой, в этом действии также менялся порядок, как они былисоздан так, чтобы в отчете Ecel они отображались в том порядке, в котором они есть.
Я видел панель.Элементы управления.Получаем свойство childIndex и оно выдает мне значение, которое, как я полагаю, является индексом, с которым оно создано, это правильно? Как я могу поменять порядок в том, как они были созданы на другой панели?
Я попробовал следующее.
Dim clickedPanel = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)
Dim varIndex As Integer = Panel1.Controls.GetChildIndex(clickedPanel)
Правильно ли это, чтобы получить индекс в том виде, в каком они были созданы, а затем изменить этот индекс?
Если нет, как я могу внести это изменение?
Заранее благодарю вас.
Я тоже попробовал следующее, но безрезультатно.
Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
Dim clickedPanel = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)
Dim varIndex As Integer = Panel1.Controls.GetChildIndex(clickedPanel)
p1Name = clickedPanel.Name
paParent = clickedPanel.Parent
indexOrigen = clickedPanel.TabIndex
End Sub
Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click
Dim clickedPanelDestino = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)
p2Name = clickedPanelDestino.Name
pbParent = clickedPanelDestino.Parent
indexDestino = clickedPanelDestino.TabIndex
Dim p1 = DirectCast(Panel1.Controls.Find(p1Name, True).FirstOrDefault(), Panel)
If p1 Is Nothing Then Throw New ArgumentException("indexOrigen")
Dim p2 = DirectCast(Panel1.Controls.Find(p2Name, True).FirstOrDefault(), Panel)
If p2 Is Nothing Then Throw New ArgumentException("indexDestino")
Dim temp = p2.Location
Dim tempIndex = indexDestino
p2.Location = p1.Location
p2.TabIndex = p1.TabIndex
p1.Location = temp
p1.TabIndex = tempIndex
End Sub
Ответ №1:
Через некоторое время это мое решение.
'Source Unit (Cut Option)
Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
Dim clickedPanel = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)
varIndexA = Panel1.Controls.GetChildIndex(clickedPanel)
p1Name = clickedPanel.Name
paParent = clickedPanel.Parent
indexOrigen = clickedPanel.TabIndex
End Sub
'Target Unit (Paste Option)
Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click
Dim clickedPanelDestino = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl, Panel)
varIndexB = Panel1.Controls.GetChildIndex(clickedPanelDestino)
p2Name = clickedPanelDestino.Name
pbParent = clickedPanelDestino.Parent
Dim p1 = DirectCast(Panel1.Controls.Find(p1Name, True).FirstOrDefault(), Panel)
If p1 Is Nothing Then Throw New ArgumentException("indexOrigen")
Dim p2 = DirectCast(Panel1.Controls.Find(p2Name, True).FirstOrDefault(), Panel)
If p2 Is Nothing Then Throw New ArgumentException("indexDestino")
Dim temp = p2.Location
p2.Location = p1.Location
Panel1.Controls.SetChildIndex(p2, varIndexA)
p1.Location = temp
Panel1.Controls.SetChildIndex(p1, varIndexB)
End Sub
Спасибо.