[Treeview VB.net] Einzelne Nodes als "checkable" markieren

OP (Firma: www.ramser-elektro.at/shop) #4830634
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?
Gast #4832964
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.