Forum: PC-Programmierung [Treeview VB.net] Einzelne Nodes als "checkable" markieren


von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?

Hallo Leute,

Möchte bei einem Treeview verschiedene nodes kennzeichnen, ob diese 
checked sein können.
Selbst unter den childnodes möchte ich differenzieren.
Leider lässt mich VS nur für das ganze Control das "checkable" 
aktiveren.

Habe jetzt folgende Seite gefunden:
http://dotnetfollower.com/wordpress/2011/05/winforms-treeview-hide-checkbox-of-treenode/

Habe nun folgendes Modul erstellt:
Imports System.Runtime.InteropServices
Module mdlWinAPI
    Private i As Integer = 0
    Private j As Integer = 0
    Private node As TreeNode()

    Public Const TVIF_STATE As Integer = &H8
    Public Const TVIS_STATEIMAGEMASK As Integer = &HF000
    Public Const TV_FIRST As Integer = &H1100
    Public Const TVM_SETITEM As Integer = TV_FIRST + 63

    Public Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As 
UInteger, _
      ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function

    Public Structure TVITEM
        Public mask As Integer
        Public hItem As IntPtr
        Public state As Integer
        Public stateMask As Integer

        Public lpszText As [String]
        Public cchTextMax As Integer
        Public iImage As Integer
        Public iSelectedImage As Integer
        Public cChildren As Integer
        Public lParam As IntPtr

    End Structure

    Public Sub HideCheckBox(ByVal node As TreeNode)
        Dim tvi As New TVITEM()
        tvi.hItem = node.Handle
        tvi.mask = TVIF_STATE
        tvi.stateMask = TVIS_STATEIMAGEMASK
        tvi.state = 0
        Dim lparam As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(tvi))
        Marshal.StructureToPtr(tvi, lparam, False)
        SendMessage(frmMain.TreeView.Handle, TVM_SETITEM, IntPtr.Zero, 
lparam)
    End Sub

End Module

Leider funktioniert es im VS nicht :-(

Aufruf:
   Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        TreeView.Nodes.Add("Software")
        TreeView.Nodes(0).Nodes.Add("Windows XP")
        TreeView.Nodes(0).Nodes(0).Nodes.Add("Benutzer automatisch 
anmelden")
        TreeView.Nodes.Add("Hardware")
        TreeView.Nodes.Add("Trinksprüche")
        TreeView.Nodes.Add("Wo ist die Toilette")
        TreeView.SelectedNode = TreeView.Nodes(0)
        HideCheckBox(TreeView.Nodes(0))
    End Sub

  Jemand eine Idee?

von Peter (Gast)


Lesenswert?

Es drei Möglichkeiten:

1. Der kopierte Code ist fehlerhaft -> Wende dich an den Autor.
2. Du verwendest den Code falsch -> Wende dich an den Autor.
3. Du hast den Code nicht verstanden -> s.o.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.