vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Es geht voran .... 
Autor: Manfred X
Datum: 28.05.14 15:42

Imports System.Windows.Forms
 
Public Class CheckedTreeView
    Inherits TreeView
 
 
    Public Sub New()
        MyBase.DrawMode = TreeViewDrawMode.OwnerDrawAll
        MyBase.CheckBoxes = True
    End Sub
 
 
    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
 
        Dim info As TreeViewHitTestInfo = Me.HitTest(e.X, e.Y)
        If info IsNot Nothing AndAlso info.Node IsNot Nothing Then
            With info.Node
                If e.X > .Bounds.X - 2 And _
                    e.X < .Bounds.X + .Bounds.Height + 4 Then
                    'Click auf die Checkbox: Checked oder unchecked
                    .Checked = Not .Checked
                Else
                    'Click auf den Node-text: collapsed oder expand
                    If .IsExpanded Then
                        .Collapse()
                    Else
                        .Expand()
                    End If
                End If
            End With
        End If
    End Sub
 
 
    Protected Overrides Sub OnDrawNode _
        (e As System.Windows.Forms.DrawTreeNodeEventArgs)
 
        MyBase.OnDrawNode(e)
 
        Dim checkedcolor As Color = Color.Red
 
        If e.Node.Bounds.Y = 0 And _
            Not Me.Nodes(0) Is e.Node Then Exit Sub 'Bug abfangen
 
        With e.Node
 
            Dim f As Font = .NodeFont
            If f Is Nothing Then f = Me.Font
 
            Dim c As Color = .ForeColor
            If .Checked Then c = checkedcolor
            If c.A = 0 Then c = Me.ForeColor 'Knotenfarbe nicht definiert
 
            Using brfore As New SolidBrush(c), _
                brback As New SolidBrush(.BackColor), _
                p As New Pen(c, 1), _
                brTreeBack As New SolidBrush(Me.BackColor)
 
                With .Bounds
 
                    'Checkbox für Knoten zeichnen
                    Dim box As New Rectangle _
                       (.X + 2, .Y + 2, .Height - 4, .Height - 4)
 
                    e.Graphics.DrawRectangle(p, box)
 
                    If e.Node.Checked Then
                        'Checkbox markieren
                        e.Graphics.DrawLine _
                             (p, .X, .Y, .X + .Height, .Y + .Height)
                        e.Graphics.DrawLine _
                             (p, .X + .Height, .Y, .X, .Y + .Height)
                    End If
 
                    'Text ausgeben (incl. Expand/Collapse-Zeichen)
                    Dim cs As String
                    If e.Node.Nodes.Count = 0 Then
                        cs = ""
                    Else
                        'Unterknoten: kollabiert oder expandiert?
                        If e.Node.IsExpanded Then cs = "(-) " Else cs = "(+) "
                    End If
                    e.Graphics.DrawString _
                        (cs & e.Node.Text, f, brfore, .X + .Height + 4, .Y)
 
                    'ggf. Verbindungslinien zu übergeordneten Knoten
                    Dim n As TreeNode = e.Node
                    Dim vertical As Boolean = True
                    While n.Parent IsNot Nothing
 
                        Dim start As Integer = _
                            n.Parent.Bounds.X + .Height \ 2
 
                        If vertical Then
                            e.Graphics.DrawLine _
                                (p, New Point(start, .Y + .Height \ 2), _
                                 New Point(.X - 4, .Y + .Height \ 2))
                            vertical = False
                        End If
 
                        e.Graphics.DrawLine(p, _
                           New Point(start, .Y + .Height), _
                           New Point(start, _
                           n.Parent.Bounds.Y + n.Parent.Bounds.Height))
 
                        n = n.Parent
                    End While
                End With
            End Using
        End With
    End Sub
 
 
     ''' <summary>Modus, in dem das Control gezeichnet wird (OwnerDrawAll)</summary>
    Public Shadows Property Drawmode() As TreeViewDrawMode
        Set(value As TreeViewDrawMode)
            '
        End Set
        Get
            Return MyBase.DrawMode
        End Get
    End Property
 
    ''' <summary>zu jedem Knoten wird ein Kontrolkästchen angezeigt</summary>
    Public Shadows Property Checkboxes() As Boolean
        Set(value As Boolean)
            '
        End Set
        Get
            Return MyBase.CheckBoxes
        End Get
    End Property
 
End Class
Klasse in das Projekt aufnehmen und Projekt übersetzen.
Danach findet sich in der Toolbox, Abschnitt <Projektname>,
ein neues Steuerelement.

Zu benutzen wie von Treeview gewohnt -
Scrollable-Eigenschaft auf false setzen, ggf. Scrollen
durch ein Scroll-Control durchführen,
per "Invalidate" das Neuzeichnen des TreeView verwalten.

Beitrag wurde zuletzt am 28.05.14 um 16:10:56 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNode ge...3.059Jenpet26.05.14 16:56
Alles in Ordnung ????2.278Manfred X26.05.14 18:52
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.312Manfred X26.05.14 19:54
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.243Jenpet27.05.14 09:08
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.339Jenpet27.05.14 11:32
OwnerDraw Treeview2.462Manfred X27.05.14 16:03
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.250Jenpet28.05.14 09:15
Zeichenschule: CheckedTreeview2.320Manfred X28.05.14 11:05
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.239Jenpet28.05.14 15:29
Es geht voran ....2.336Manfred X28.05.14 15:42
Immer noch ....2.396Manfred X28.05.14 16:25
Re: VB.net Treeview mit Checkboxes - Wie prüfe ich ob TopNod...2.233Jenpet28.05.14 16:06

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel