Forums Neueste Beiträge
 
Tags Keywords

TreeView

21/04/2008 - 13:43 von Wolfgang Kalteis | Report spam
Hallo,
ich möchte in einem TreeViewControl (mit sichtbaren Checkboxen)
an bestimmten Knoten keine Checkbox anzeigen.

Das geht wohl nur mit "selbstzeichnen" (oder kostenpfl. Fremdcontrol).
Wer kann mir hier weiterhelfen (am besten mit Code), da ich in dieser Ecke
keine Ahnung habe (und meine Bücher auch nicht, Google findet auch nichts).
Danke
 

Lesen sie die antworten

#1 Karsten Sosna
22/04/2008 - 08:20 | Warnen spam
Hallo,
ich möchte in einem TreeViewControl (mit sichtbaren Checkboxen)
an bestimmten Knoten keine Checkbox anzeigen.

Das geht wohl nur mit "selbstzeichnen" (oder kostenpfl. Fremdcontrol).
Wer kann mir hier weiterhelfen (am besten mit Code), da ich in dieser Ecke
keine Ahnung habe (und meine Bücher auch nicht, Google findet auch
nichts).



Hallo Wolfgang,
Du könntest es Dir einfach machen, in dem Du im TreeView_DrawNode-Event
Teile des Node neu zeichnest. Dazu solltest Du die
TreeView.DrawMode-Eigenschaft auf OwnerDrawText stellen. Durch diese
Einstellung wird das Event ausgelöst wenn der Knoten neu gezeichnet werden
muss. Wie Du sehen wirst fehlt der Text den musst Du also zeichnen. Über die
e.Bounds-Eigenschaft kommst Du an die Position. Unmittelbar vor der Position
liegt das Rechteck in dem die CheckBox gezeichnet wird. Bei mir ist die
CheckBox 13x13 Pixel groß, inwiefern diese Größe von den Systemeinstellungen
abhàngig ist, weiß ich nicht.
Mit einem Click auf das Formular kannst Du die Anzeige der CheckBox vom
ausgewàhlten Knoten umdrehen.
\\\
Public Class Form1

Private WithEvents TreeView1 As New TreeView

Private Sub Form1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Click
DirectCast(TreeView1.SelectedNode, MyTreeNode).ShowCheckBox = Not
DirectCast(TreeView1.SelectedNode, MyTreeNode).ShowCheckBox
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
TreeView1.Parent = Me
TreeView1.CheckBoxes = True
TreeView1.DrawMode = TreeViewDrawMode.OwnerDrawText
Dim TN As New MyTreeNode
TN.Text = "Node1"
TN.ShowCheckBox = False
TreeView1.Nodes.Add(TN)
TN = New MyTreeNode
TN.Text = "Node2"
TN.ShowCheckBox = True
TreeView1.Nodes.Add(TN)
End Sub

Private Sub TreeView1_DrawNode(ByVal sender As Object, ByVal e As
System.Windows.Forms.DrawTreeNodeEventArgs) Handles TreeView1.DrawNode
Using SB As New SolidBrush(Color.Red)
Using SF As New StringFormat
SF.LineAlignment = StringAlignment.Center
If TreeView1.SelectedNode Is e.Node Then
SB.Color = TreeView1.BackColor
Else
SB.Color = TreeView1.ForeColor
End If
e.Graphics.DrawString(e.Node.Text, TreeView1.Font, SB,
e.Bounds, SF)
End Using
If Not DirectCast(e.Node, MyTreeNode).ShowCheckBox Then
SB.Color = TreeView1.BackColor
e.Graphics.FillRectangle(SB, e.Bounds.X - 13, e.Bounds.Y,
13, e.Bounds.Height)
End If
End Using
End Sub
End Class

Public Class MyTreeNode
Inherits TreeNode

Private _ShowCheckBox As Boolean = True

Public Property ShowCheckBox() As Boolean
Get
Return _ShowCheckBox
End Get
Set(ByVal value As Boolean)
If _ShowCheckBox <> value Then
_ShowCheckBox = value
If Me.TreeView IsNot Nothing Then
Me.TreeView.BeginUpdate()
Me.TreeView.Invalidate()
Me.TreeView.EndUpdate()
End If
End If
End Set
End Property
End Class
///
Ach noch etwas, die Funktionalitàt der CheckBox ist noch da, man kann nur
die Box nicht mehr sehen.
Gruß Scotty

Ähnliche fragen