GUICtrlCreateTreeViewItem auslesen bzw bei select text lesen

  • hallo, ich habe ein Problem mit einem GUICtrlCreateTreeView.

    Ich habe dynamische Items und möchte wenn ich auf eines klicke, dass es einfach als msgbox ausgelesen bzw. dann dargestellt wird.

    Als Beispiel:

    +Nachname
    ----xxx
    ----yyy
    +Vorname
    ---fff
    ---nnn


    Wenn ich jetzt auf z.B. fff klicke soll einfach eine msgbox erscheinen mit fff.
    Wohl bemerkt dynamische vorher nicht bekannte anzahl von items.

    vielen dank.

  • also aktuell ist es so das alle OUs ausgelesen werden eines ADs.

    die Anzahl der OUs ist natürlich X. Hier mal der Code

    [autoit][/autoit][autoit][/autoit][autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>
    GUICreate ("User erstellen", "1024","768")
    GUISetState (@SW_SHOW)
    Const $ADS_SCOPE_SUBTREE = 2
    DIM $objDomain, $objUser

    [/autoit][autoit][/autoit][autoit]

    $domain_2_work = InputBox("Domäne", "Bitte geben Sie die Domäne an:",""&@LogonDNSDomain)
    $domain_2_work_Split = StringSplit ($domain_2_work,".")
    $logondomain = $domain_2_work_Split[1]
    $LogonDNS = $domain_2_work_Split[2]

    [/autoit][autoit][/autoit][autoit]

    $objConnection = ObjCreate("ADODB.Connection")
    $objCommand = ObjCreate("ADODB.Command")
    $objConnection.Provider = "ADsDSOObject"
    $objConnection.Open ("Active Directory Provider")
    $objCommand.ActiveConnection = $objConnection

    [/autoit][autoit][/autoit][autoit]

    $objCommand.Properties("Page Size") = 1000
    $objCommand.Properties("Searchscope") = $ADS_SCOPE_SUBTREE

    [/autoit][autoit][/autoit][autoit]

    $objCommand.CommandText = _
    "SELECT ADsPath FROM 'LDAP://dc="&$logondomain&",dc="&$LogonDNS&"' WHERE " & _
    "objectCategory='organizationalUnit'"
    $objRecordSet = $objCommand.Execute

    [/autoit][autoit][/autoit][autoit]

    $objRecordSet.MoveFirst()
    ; Ende des auslesens
    $treeview = GUICtrlCreateTreeView (0,0,1024,100,BitOr($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS),$WS_EX_CLIENTEDGE)
    $OUtree_1 = GUICtrlCreateTreeViewItem (""&@LogonDNSDomain,$treeview)

    [/autoit][autoit][/autoit][autoit]

    do
    $OUtree_2 = GUICtrlCreateTreeViewItem ($objRecordSet.Fields("ADsPath").Value,$OUtree_1)
    until $objRecordSet.MoveNext() Or $objRecordSet.EOF()

    [/autoit][autoit][/autoit][autoit]

    do
    $msg = GUIGetMsg()
    until $msg = $GUI_EVENT_CLOSE

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]


    So nun werden alle OUs mit in den Tree geworfen. Nun möchte ich davon eine auswählen. Bei (ich nenne ich mal select) soll nun die OU bzw. der Wert als msgbox oder das endziel in ein input feld kommen (zum weiteren arbeiten).

    • Offizieller Beitrag
    [autoit]

    $OUtree_1 = GUICtrlCreateTreeViewItem (""&@LogonDNSDomain,$treeview)

    [/autoit]


    Erstelle die ID's der TreeViewItems in einem Array, dann hast du die Anzahl, völlig egal wieviel Einträge erstellt werden.
    2 Varianten
    - entweder definierst du ein Array mit einer festen Größe (z.B. 500 als max. Userzahl)
    oder
    - du änderst die Arraygröße bei jedem neuen Eintrag mit ReDim

    Ich empfehle die erste Variante, sie ist die schnellere.
    Also:

    [autoit]

    Dim $arUserItem[500]
    $arUserItem[0] = 0 ; Zähler für die Anzahl der Items führen
    ;...
    ;...
    ; jetzt statt: $OUtree_1 = GUICtrlCreateTreeViewItem (""&@LogonDNSDomain,$treeview)
    $arUserItem[$arUserItem[0]+1] = GUICtrlCreateTreeViewItem (""&@LogonDNSDomain,$treeview)
    $arUserItem[0] += 1 ; Zähler erhöhen

    [/autoit]
  • danke erstmal für den tip, hört sich sehr gut an.
    wie kann ich das ganze nun noch ansteuern? bzw. bei select das ausgewählte in einer msgbox oder in ein inputfeld schreiben.

    wie adressiere ich dann die var? Sie steigt ja? Oder steh ich wieder hinterm baum=

    • Offizieller Beitrag

    Du willst ja nur auslesen, sehe ich grade. Da ist es völlig egal wie deine Items heißen. Das geht so:

    [autoit]

    ; Entweder
    ;..
    $msg = GUIGetMessage()
    ;..
    Case $msg = $button
    $h_item = GUICtrlSendMsg($treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
    MsgBox(0,"", _GUICtrlTreeViewGetText($treeview, $h_item)
    ;
    ;
    ; ODER OnEvent Mode
    ;
    Func _TreeViewClick()
    $h_item = GUICtrlSendMsg($treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
    MsgBox(0,"", _GUICtrlTreeViewGetText($treeview, $h_item)
    EndFunc

    [/autoit]
  • noch #include <GuiTreeView.au3>

    und dann passt das.


    Besten Dank sage ich da mal nur!