Element in einem Treeview verschieben

06/06/2008 - 11:00 von Orazio Di Marco | Report spam
Hallo,

ich hab ein Problem.
Ich möchte in einem Treeview ein Node nach oben bzw. nach unten verschieben.
Ich habe alles mögliche schon versucht. Komm aber einfach nicht auf einen
grünen zweig.

Leider hab ich auch keine Möglichkeit eine Liste zu benutzen. Es muss ein
Tree sein.
In meinem Tree gibt es nur eine Ebene wenn das euch weiterhilft. Und jetzt
möchte ich eben in der obersten ebene ein Element nach oben bzw. nach unten
verschieben.
Nur wie???

Für jede Hilfe wàre ich euch sehr dankbar.

gruß
 

Lesen sie die antworten

#1 Peter Götz
06/06/2008 - 13:22 | Warnen spam
Hallo Orazio,

ich hab ein Problem.
Ich möchte in einem Treeview ein Node nach oben bzw.
nach unten verschieben.



Kleines Beispiel:

' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents TV As TreeView
Private WithEvents btnUp As Button
Private WithEvents btnDown As Button
Private mRnd As New Random(Now.Millisecond)


Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateControls()
CreateData()

End Sub

Private Sub CreateData()
Dim i As Integer
Dim strBuffer As String
For i = 1 To 9
strBuffer = "Node" & i.ToString
TV.Nodes.Add(strBuffer, strBuffer)
AddSubNodes(TV.Nodes(i - 1))
Next
End Sub

Private Sub AddSubNodes(ByVal TN As TreeNode)
Dim i As Integer
Dim Max As Integer = mRnd.Next(0, 5)
Dim strBuffer As String
For i = 1 To Max
strBuffer = _
"SubNode" & _
(TN.Index + 1).ToString & _
"_" & i.ToString

TN.Nodes.Add(strBuffer, strBuffer)
Next
End Sub

Private Sub CreateControls()
Me.Size = New Size(300, 300)
TV = New TreeView
With TV
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 70, _
Me.ClientSize.Height - 20)

.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom
End With
Me.Controls.Add(TV)

btnDown = New Button
With btnDown
.Font = _
New Font("Arial", 8, FontStyle.Bold)

.SetBounds _
(Me.ClientSize.Width - 50, _
TV.Bottom - 40, _
40, 40)

.Anchor = AnchorStyles.Right Or _
AnchorStyles.Bottom
.Text = "dn"
End With
Me.Controls.Add(btnDown)

btnUp = New Button
With btnUp
.Font = btnDown.Font

.SetBounds _
(btnDown.Left, _
btnDown.Top - 50, _
40, 40)

.Anchor = btnDown.Anchor
.Text = "up"
End With
Me.Controls.Add(btnUp)
End Sub

Private Sub btnUp_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles btnUp.Click

btnUp.Enabled = False
Dim TN As TreeNode = TV.SelectedNode
If TN IsNot Nothing Then
Dim ParentNode As TreeNode = TN.Parent
Dim Idx As Integer = TN.Index
TV.Nodes.Remove(TN)
If TypeOf ParentNode Is TreeNode Then
ParentNode.Nodes.Insert(Idx - 1, TN)
Else
TV.Nodes.Insert(Idx - 1, TN)
End If
TV.SelectedNode = TN
TV.Focus()
End If
btnUp.Enabled = True

End Sub

Private Sub btnDown_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles btnDown.Click

btnDown.Enabled = False
Dim TN As TreeNode = TV.SelectedNode
If TN IsNot Nothing Then
Dim ParentNode As TreeNode = TN.Parent
Dim Idx As Integer = TN.Index
TN.Remove()
If TypeOf ParentNode Is TreeNode Then
ParentNode.Nodes.Insert(Idx + 1, TN)
Else
TV.Nodes.Insert(Idx + 1, TN)
End If
TV.SelectedNode = TN
TV.Focus()
End If
btnDown.Enabled = True
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart einen beliebigen Knoten
markieren und dann einen der Buttons "Up" oder
"Down" anklicken.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen