_GUICtrlListView_GetItemText verträgt sich nicht mit _GUICtrlListView_GetSelectedIndices ?!?

  • Hallo,

    aus einer ListView möchte ich den Text des Subitems1 des gerade selektierten Items lesen. Egal was für Styles ich gebe,

    [autoit]

    $text = _GUICtrlListView_GetItemText($list, _GUICtrlListView_GetSelectedIndices($list), 1)
    MsgBox(0,"",$text)

    [/autoit]


    Gibt immer nichts zurück.
    Wenn ich statt _GUICtrlListView_GetSelectedIndices(...) einfach 0 als Index einsetze, kommt der richtige Wert des ersten Items als Rückgabe. Wenn ich den Rückgabewert von _GUICtrlListView_GetSelectedIndices(...) in einer MsgBox ausgebe, kommt aber auch der richtige Indexwert!

    Hier ist ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    GUICreate("hik",400,200)
    $list = GUICtrlCreateListView("1|2",5,5,390,150)
    GUICtrlCreateListViewItem("hallo|cya",$list)
    GUICtrlCreateListViewItem("hallo2|cya2",$list)
    $start = GUICtrlCreateButton("Start Test", 5,170)
    GUISetState()

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

    Func GetValue()
    If _GUICtrlListView_GetSelectedIndices($list) = "" Then
    MsgBox(0,"","Bitte wähle zuerst eine Spalte aus")
    Else
    MsgBox(0,"Index stimmt",_GUICtrlListView_GetSelectedIndices($list))
    MsgBox(0,"Warum ist die Ausgabe falsch?!?",_GUICtrlListView_GetItemText($list, _GUICtrlListView_GetSelectedIndices($list), 1))
    MsgBox(0,"Warum geht es aber mit manuellem Index???", _GUICtrlListView_GetItemText($list, 0, 1))
    MsgBox(0,"Warum geht es aber mit manuellem Index???", _GUICtrlListView_GetItemText($list, 1, 1))
    EndIf
    EndFunc

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $start
    GetValue()
    EndSwitch
    Sleep(5)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von NoName (23. Mai 2009 um 09:46)

  • Hallo NoName,

    warum machst du es nicht so:

    [autoit]

    $aLVItem= _GUICtrlListView_GetItemTextArray($list)
    MsgBox(0,"Das ist Spalte 1 ",$aLVItem[1]) ; $aListViewItem ist ein 0 basierendes Array in 0 teht die Anzahl der Einträge
    MsgBox(0,"Das ist Spalte 2 ",$aLVItem[2]) ; $aListViewItem ist ein 0 basierendes Array in 0 teht die Anzahl der Einträge

    [/autoit]

    mfg(Auto)Bert

    • Offizieller Beitrag

    Probier es mal so:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <Array.au3>
    GUICreate("hik",400,200)
    $list = GUICtrlCreateListView("1|2",5,5,390,150)
    $hList = GUICtrlGetHandle($list)
    GUICtrlCreateListViewItem("hallo|cya",$list)
    GUICtrlCreateListViewItem("hallo2|cya2",$list)
    $start = GUICtrlCreateButton("Start Test", 5,170)
    GUISetState()

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

    Func GetValue()
    If _GUICtrlListView_GetSelectedIndices($hlist) = "" Then
    MsgBox(0,"","Bitte wähle zuerst eine Spalte aus")
    Else
    MsgBox(0,"Index stimmt",_GUICtrlListView_GetSelectedIndices($hList))
    MsgBox(0,"Warum ist die Ausgabe falsch?!?",_GUICtrlListView_GetItemText($hList, _GUICtrlListView_GetSelectedIndices($hList), 1))
    MsgBox(0,"Warum geht es aber mit manuellem Index???", _GUICtrlListView_GetItemText($hList, 0, 1))
    MsgBox(0,"Warum geht es aber mit manuellem Index???", _GUICtrlListView_GetItemText($hList, 1, 1))
    EndIf
    EndFunc

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $start
    GetValue()
    EndSwitch
    Sleep(5)
    Wend

    [/autoit]

    Die UDF Funktionen wollen meist den Handle des >Controls und nicht die ControlID.

  • Hallo NoName,

    warum machst du es nicht so:

    [autoit]

    $aLVItem= _GUICtrlListView_GetItemTextArray($list)
    MsgBox(0,"Das ist Spalte 1 ",$aLVItem[1]) ; $aListViewItem ist ein 0 basierendes Array in 0 teht die Anzahl der Einträge
    MsgBox(0,"Das ist Spalte 2 ",$aLVItem[2]) ; $aListViewItem ist ein 0 basierendes Array in 0 teht die Anzahl der Einträge

    [/autoit]

    mfg(Auto)Bert


    Weil ich nur den selektierten Bereich haben will.


    Ok, daran bin ich mal wieder gescheitert =S
    Danke.

    • Offizieller Beitrag

    Wenn ich den Rückgabewert von _GUICtrlListView_GetSelectedIndices(...) in einer MsgBox ausgebe, kommt aber auch der richtige Indexwert!


    Diese Funktion arbeitet sowohl mit ID als auch mit Handle, _GUICtrlListView_GetItemText() erfordert aber zwingend das Handle.
    Deshalb ist es ratsam, den von Raupi gezeigten Weg immer zu gehen.
    Zum Erstellen des ListView würde ich allerdings nur selten die UDF _GUICtrlListView_Create() benutzen.
    Die Standardfunktion bietet nämlich den Handlingvorteil, durch mit Trennzeichen versehenen String, in einem Befehl Item und SubItem zu erstellen. So kann man diesen String wunderbar in einer Datei speichern, um daraus schnell das LV zu befüllen.