Text von markiertem ListViewItem

  • Hey Leute,
    Ich bins wieder mal mit einer Frage. Ich glaube die Loesung ist recht einfach aber ich komm nicht drauf :D Also ich habe eine Liste mit Filmen in einem ListView. Wenn ich auf den Button Details klicke moechte ich das er mir weitere details zum markierten Film gibt. Dazu braeuchte ich nur den Text des makierten ListViewItems. Zum beispiel habe ich den Film "Alien 3" makiert. Dann moechte ich das er mir den Titel in einer variablen speichert.

    Danke fuer eure hilfe ;)

    Einmal editiert, zuletzt von clonker (4. Januar 2011 um 15:12)

  • Hallo Clonker,

    das einfachste ist du läst dir mit

    [autoit]

    _GUICtrlListView_GetItemTextArray

    [/autoit]

    ein Array mit allen Spalten zurückgeben. Achtung das Element 0 im Array enthält die Anzahl der Einträge,

    Frohes gutes neues Jahr

  • hey danke schonmal fuer die schnelle antwort ;) Eine Frage hab ich aber noch :D Wie kann ich dann erkennen welches von den ListViewsItems makiert wurde ?

    Danke im Vorraus

    EDIT: und dir auch ein frohes Neues ;)

  • Zitat von Hilfe zu _GUICtrlListView_GetItemTextArray

    Bemerkungen

    Falls $iItem = -1 ist, wird das aktuell ausgewählte Item verwendet.


    Hier ein Auszug aus einem Beispielskript von mir:

    [autoit]

    Case $hbtnInfo
    $Wert = _GUICtrlListView_GetItemTextArray($listview)
    If $Wert[2] <> "" Then
    MsgBox(0, "Eintrag für " & $Wert[1], "ist: " & $Wert[2])
    Else
    MsgBox(0, "", "Kein Eintrag ausgewählt")
    EndIf

    [/autoit]

    falls bei dir Mehrfachselektion erlaubt ist must du dir von

    [autoit]

    _GUICtrlListView_GetSelectedIndices

    [/autoit]

    ein Array aller selektierten Items zurückgeben lassen. Durch dieses Array geht du dann in einer For..Next Schleife und gibst den jeweiligen Index an. Hier ein Auszug dazu aus dem gleichen Beipielskript:

    [autoit]

    Case $idClipmenu
    $aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
    $sItemText = ""
    For $i = 1 To $aItems[0]
    ;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
    $sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
    ConsoleWrite($sItemText & @CRLF)
    Next ;= > weiter mit For

    [/autoit]

    hier benutze ich zwar _GUICtrlListView_GetItemTextString, dies hat aber die gelichen Paramater und ist für den Schleifenaufbau unerheblich.

    mfg autoBert

  • Hier noch was einfacheres :) (Für ListView`s mit nur einer Spalte)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("ListView-Test", 532, 280, 347, 164)
    $list = GUICtrlCreateListView("List ", 16, 16, 345, 209)
    GUICtrlCreateListViewItem("Test",$list)
    GUICtrlCreateListViewItem("Fest",$list)
    GUICtrlCreateListViewItem("Rest",$list)
    $Button1 = GUICtrlCreateButton("GetSelectedItem", 368, 64, 145, 25)
    GUISetState(@SW_SHOW)

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

    While Sleep(30)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _check()
    EndSwitch
    WEnd

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

    Func _check()
    $item = StringTrimRight(GUICtrlRead(guictrlread($list)),1)
    If $item = "" Then
    MsgBox(0,"Error","No Item selected!")
    Else
    MsgBox(0,"",$item)
    EndIf
    EndFunc

    [/autoit]

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

    Einmal editiert, zuletzt von hellboy3 (7. Januar 2011 um 11:07)

  • sorry aber ich habe doch noch ein kleines Problem. Ich habe die methode von hellboy3 genommen. Das hat bis jetzt auch alles super geklappt. Nur nun habe ich folgendes Problem. Mein Listview hat nun mehrere spalten. Wie bekomme ich jetzt nur den text von nur einem item in einer spalte ?( Also habe ich z.B Name | Nummer | Bewertung. UNd jetzt brauche ich z.B. nur den namen. das wuerde schon reichen. die nummer und bewertung braucht er nicht mir auslesen.

    Danke Fuer eure Hilfe ;)

  • Hallo clonker,

    hier einmal ein komplettes Beispiel um zu zeigen wie einfach _GUICtrlListView_GetItemText auszuwerten ist:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    ;#include <array.au3>

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

    $main = GUICreate("Testlistview Drag & Drop from LV to Input", 600, 400)
    $listview = GUICtrlCreateListView("Name| Länge|Bemrkung", 10, 10, 580, 350, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS ), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))

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

    $Input = GUICtrlCreateInput("Target", 10, 370, 500, 20)
    GUICtrlSetState($Input, $GUI_DROPACCEPTED)
    $hbtnInfo = GUICtrlCreateButton("Info", 520, 370, 40, 20)
    For $i = 1 To 19
    GUICtrlCreateListViewItem("Filmname" & $i & " |" & Random(45, 190,1)&":" & Random(0,59,1) & "|" & "Bem " & $i , $listview)
    Next
    GUISetState()
    $first = True
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED
    ;$aItem = _GUICtrlListView_GetItemText($listview)
    ;_ArrayDisplay($aItem)
    $sItem = _GUICtrlListView_GetItemTextString($listview)
    GUICtrlSetData($Input,$sItem)
    Case $hbtnInfo ;<=================
    $aItem = _GUICtrlListView_GetItemTextArray($listview) ;die Spaltenwerte in Array einlesen (in $aIem[0] wird die Anzahl der Elemente zrückgegeben
    MsgBox(0, $aItem[1], $aItem[2])
    ;1. Element (Spalte 1) als MsgBoxüberchrift ausgeben
    ;2. Element (Spalte 2) als MsgBoxtext ausgegeben
    ConsoleWrite($aItem[3] & @crlf)
    ;3. Element (Spalte 3) als Consolenausgabe
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]


    für dich interessant ist der Case-Zweig $hbtnInfo

    mfg autoBert

  • Danke ;) hat alles geklappt. nun ist endlich das Programm fuer meinen Vater fertig. Er hat sich gefreut :thumbup:

    Liebe Gruesse

    clonker

  • So wärs auch noch gegangen :D

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("ListView-Test", 532, 280, 347, 164)
    $list = GUICtrlCreateListView("List | Test | Blaa ", 16, 16, 345, 209)
    GUICtrlCreateListViewItem("Test",$list)
    GUICtrlCreateListViewItem("|lala|",$list)
    GUICtrlCreateListViewItem("Rest|test|bla",$list)
    GUICtrlCreateListViewItem("|pest",$list)
    $Button1 = GUICtrlCreateButton("GetSelectedItem", 368, 64, 145, 25)
    GUISetState(@SW_SHOW)

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

    While Sleep(30)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _check()
    EndSwitch
    WEnd

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

    Func _check()
    $item =StringSplit(GUICtrlRead(guictrlread($list)),"|")
    If @error Then
    MsgBox(0,"Error","No Item selected!")
    Else
    MsgBox(0,"ItemText","Spalte1: " & $item[1] & @CRLF & "Spalte2: " & $item[2] & @CRLF & "Spalte3: " & $item[3])
    EndIf
    EndFunc

    [/autoit]

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio