ListView - Aktion bei Auswahl bestimmter ListViewItems

  • Hallo liebe Gemeinde,

    vereinfacht dar gestellt sieht mein Script so aus:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $werte[5]
    $werte[0] = "a"
    $werte[1] = "b"
    $werte[2] = "c"
    $werte[3] = "d"
    $werte[4] = "e"

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

    $msg = GUICreate("test", 200, 500)
    $list = GUICtrlCreateListView("Werte:", 10, 20, 180, 460)
    $ListViewItem_test = GUICtrlCreateListViewItem("test", $list)

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

    For $y = 0 to UBound($werte)-1
    GUICtrlCreateListViewItem($werte[$y], $list)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ListViewItem_test
    MsgBox(0, "", "test wurde gedrückt")
    EndSwitch
    WEnd

    [/autoit]

    Ich möchte jetzt aber eine Aktion ausführen wenn z.B. der Wert "a" in der liste ausgewählt ist
    meine Frage: wie kann ich die ListViewItem's unterscheiden?
    soweit ich weiß müsste es doch sogar gehen, das ein Klick auf ein ListViewItem ein ContextMenü aufruft oder?

    zB:

    [autoit]

    ;...
    Case $ListViewItem_1 ; 2,3 usw
    ; mache dies und das
    ;...

    [/autoit]

    jedoch haben meine ListViewItem's keine Variablenzuweißung durch die For-Schleife
    jeder Versuch ihnen einzelne Variablen zu zu weißen so das jedes ListViewItem definierbar ist sind bisher gescheitert :(

    Hat Jemand eine Idee?
    Wäre sehr dankbar dafür.. versuch dieses Problem nun schon sein über 2 tagen zu lösen :(

    Gruß Inferior

    6 Mal editiert, zuletzt von Inferior (23. Juli 2010 um 15:19)

    • Offizieller Beitrag

    So:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $werte[5]
    $werte[0] = "a"
    $werte[1] = "b"
    $werte[2] = "c"
    $werte[3] = "d"
    $werte[4] = "e"

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

    $msg = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 460)

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

    For $y = 0 To UBound($werte) - 1
    GUICtrlCreateListViewItem($werte[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo, $iItem, $iValue
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $iItem = DllStructGetData($tInfo, 'SubItem')
    $iValue = _GUICtrlListView_GetItemTextString($hWndListView, $iItem)
    ToolTip('Du hast "' & $iValue & '" angeklickt.')
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • hmm in deinem beispiel hab ich angeblich immer "a" angeklickt....
    ich möchte eigendlich nur eine möglichkeit um fest zu stellen was angeklickt wurde.. danach wird dieses wissen nur weiter verarbeitet

    • Offizieller Beitrag

    Das Beispiel funktioniert bei mir einwandfrei. Was hast Du für eine Version von AutoIt?

    Aber abgesehen davon, geht es auch so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $werte[5]
    $werte[0] = "a"
    $werte[1] = "b"
    $werte[2] = "c"
    $werte[3] = "d"
    $werte[4] = "e"

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

    $hGui = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 460)

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

    For $y = 0 To UBound($werte) - 1
    GUICtrlCreateListViewItem($werte[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($hGui, '', $hListView, 'GetSelected')
    $iText = ControlListView($hGui, '', $hListView, 'GetText', $iSelect, 0)
    ToolTip($iText)
    EndSwitch
    WEnd

    [/autoit]
  • die 2. Variante sieht viel einfacher aus und funktioniert auch ;)
    werd mich mal mit der beschäftigen und versuchen mein script danach an zu passen

    benutze V3.3.6.0

    EDIT:

    so.. irgendwie bringt mich das ganze nicht direkt weiter :(
    mein problem ist komplexer.. vllt agiere ich auch nur zu komliziert...

    Situation:

    2 arrays sind vorhanden:
    $a und $b
    die daten von $a sollen in die listview gesetzt werden
    wenn nun wert $a[0] in der listview ausgewählt wurde, dann soll das script dies erkennen und ihn mit dem dazugehörigen $b[0] wert ersetzten

    also hinterher soll er dies tun:

    [autoit]

    For $i = 0 to UBound($a)-1
    if $listview = $a[$i] then $listview = $b[$i]
    Next

    [/autoit]

    nur die erkennung das die listview den wert $a[0] hat (bzw dort der wert markiert worden ist) bekomm ich nicht hin

    Einmal editiert, zuletzt von Inferior (20. Juli 2010 um 23:01)

  • Hallo inferior,

    hier eine Variante mit Doppelklick, das 2. Array habe ich gleich in die LV mit aufgenomen:

    Spoiler anzeigen
    [autoit]

    [autoit]#include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]Global $buchstaben[5]
    $buchstaben[0] = "a"
    $buchstaben[1] = "b"
    $buchstaben[2] = "c"
    $buchstaben[3] = "d"
    $buchstaben[4] = "e"
    Global $zahlen[5]
    $zahlen[0] = "1"
    $zahlen[1] = "2"
    $zahlen[2] = "3"
    $zahlen[3] = "4"
    $zahlen[4] = "5"

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]$msg = GUICreate("test", 200, 500)
    $list = GUICtrlCreateListView("Buchstaben|Zahlen", 10, 20, 180, 460)

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]For $y = 0 To UBound($buchstaben) - 1
    GUICtrlCreateListViewItem($buchstaben[$y] & "|" & $zahlen[$y], $list)
    Next
    _GUICtrlListView_SetColumnWidth($list, 1, 0) ;Spalte Zahlen verstecken
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]GUISetState(@SW_SHOW)

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]

    [/autoit]

    [/autoit]

    [autoit]

    [autoit]Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $list Then
    ConsoleWrite($code & @CRLF)
    Switch $code
    ;case -2 ;Klick
    Case -3 ;Doppelklick
    If _GUICtrlListView_GetSelectedCount($list) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($list)
    If _GUICtrlListView_GetItemSelected($list, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($list, $i)
    MsgBox(0, "Doppel-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
    EndIf
    Next
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    [/autoit]

    mfg (Auto)Bert

    • Offizieller Beitrag

    @Inferior: In meinem Beispiel ist in $iSelect der Index zu dem Listview-Item enthalten, dieser entspricht auch dem Index des Array $werte. Das heißt, wenn Dein zweites Array "$b" analog zu dem Ersten aufgebaut ist, dann kannst Du den Wert einfach mit $b[$iSelect] ansprechen, ganz ohne For...Next-Schleife und If-Anweisung.

  • hallo,
    danke für euer bemühen! AutoBert's Version ist daher unschön, da die werte $b auch in die listview geschrieben werden... durch ziehen der listveiw erscheinen auch diese werte in der liste oscar.. deinen beitrag versteh ich leider noch nicht ganz ?(

    also ich versuch nochmal das vllt bisschen besser zu erklären, wohlmöglich geht das ganze auch viel einfach O.o

    vorher hatte ich das so (hatte funktioniert):

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #Include <Array.au3>

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

    Global $a[5]
    $a[0] = "hans"
    $a[1] = "fritz"
    $a[2] = "karl"
    $a[3] = "keinz"
    $a[4] = "josef"

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

    Global $b[5]
    $b[0] = "123456"
    $b[1] = "654321"
    $b[2] = "13579"
    $b[3] = "246810"
    $b[4] = "321456"

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

    $a_String = _ArrayToString($a)

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

    $msg = GUICreate("test", 200, 100)
    $hCombo = GUICtrlCreateCombo("", 25, 20, 150, 20)
    GUICtrlSetData(-1, $a_String)
    $ok = GUICtrlCreateButton("OK", 60, 60, 80, 25)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ok
    $hCombo = GUICtrlRead($hCombo)

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

    For $i = 0 to UBound($a)-1
    if $hcombo = $a[$i] then $hcombo = $b[$i]
    Next

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

    MsgBox(0, "", $hCombo)
    EndSwitch
    WEnd

    [/autoit]

    man konnte den Namen auswählen und hat dann eine Nr. erhalten
    und so möchte ich das in der ListView auch.. wie bekomm ich das hin?

    Edit Oscar: Spoiler hinzugefügt.

    Einmal editiert, zuletzt von Oscar (21. Juli 2010 um 19:29)

    • Offizieller Beitrag

    Ganz einfach so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $a[5]
    $a[0] = "hans"
    $a[1] = "fritz"
    $a[2] = "karl"
    $a[3] = "keinz"
    $a[4] = "josef"

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

    Global $b[5]
    $b[0] = "123456"
    $b[1] = "654321"
    $b[2] = "13579"
    $b[3] = "246810"
    $b[4] = "321456"

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

    $hGui = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 460)

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

    For $y = 0 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($hGui, '', $hListView, 'GetSelected')
    If $iSelect <> '' Then
    $iText = ControlListView($hGui, '', $hListView, 'GetText', $iSelect, 0)
    ToolTip('Ausgewählt: ' & $iText & ', Wert = ' & $b[$iSelect])
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Bitte benutze zusätzlich Spoiler bei längeren Skripten.

  • danke oscar,

    hab mittlerweile sogar ne eigene lösung zwischenzeitlich gefunden
    problem aber bei meiner und auch bei deiner lösung ist,
    dass ein klick in die listview (unabhängig ob man einen wert anklickt; bsw nur den scrollbalken bewegt)
    immer der zuletzt markierte wert genommen wirt bzw wenn noch nichts angeklickt wurde der erste

    ich hoffe mein problem wurde verstanden
    weiß nicht wie ichs besser erklären kann...

    doppelklick wäre eine gute möglichkeit hab dazu auch schon etwas gefunden aber bin noch am probieren..

  • ok habs nochmal getestet und hab nen fehler gefunden
    jetzt macht er anfangs nichts bei klicks auf den scrollbalken oder einem freien feld ect (wenn noch kein wert in der listview ausgewählt ist)
    so weit so gut

    wenn ich nun einen wert in der liste anklicke zeigt er mir diesen auch..
    klicke ich danach aber in der gesamten gui!!! IRGENDWO hin, so zeigt er mir sofort den zu erst angeklickten wert erneut an ?(?(?(

    ja hab es natürlich ein wenig geändert und so modifiziert das es in meinem knapp 850 zeilen langen script läuft

    • Offizieller Beitrag

    Dann versuch es so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $a[5]
    $a[0] = "hans"
    $a[1] = "fritz"
    $a[2] = "karl"
    $a[3] = "keinz"
    $a[4] = "josef"

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

    Global $b[5]
    $b[0] = "123456"
    $b[1] = "654321"
    $b[2] = "13579"
    $b[3] = "246810"
    $b[4] = "321456"

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

    $hGui = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 460)

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

    For $y = 0 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($hGui, '', $hListView, 'GetSelected')
    If $iSelect <> '' Then
    Local $a = GUIGetCursorInfo()
    If $a[4] = $hListView Then
    $iText = ControlListView($hGui, '', $hListView, 'GetText', $iSelect, 0)
    ToolTip('Ausgewählt: ' & $iText & ', Wert = ' & $b[$iSelect])
    EndIf
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Bei dieser Lösung wird nur der ToolTip angezeigt wenn du innerhalb des Listviews klickst. Besser würde das aber unter verwendung von WM_NOTIFY funktionieren.

  • doppelklick wäre eine gute möglichkeit hab dazu auch schon etwas gefunden aber bin noch am probieren..


    Hier eine Version mit Doppelklick und nur das 1. Array in der Listview:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    Global $buchstaben[5]
    $buchstaben[0] = "a"
    $buchstaben[1] = "b"
    $buchstaben[2] = "c"
    $buchstaben[3] = "d"
    $buchstaben[4] = "e"
    Global $zahlen[5]
    $zahlen[0] = "1"
    $zahlen[1] = "2"
    $zahlen[2] = "3"
    $zahlen[3] = "4"
    $zahlen[4] = "5"

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

    $msg = GUICreate("test", 200, 500)
    $list = GUICtrlCreateListView("Buchstaben|Zahlen", 10, 20, 180, 460)

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

    For $y = 0 To UBound($buchstaben) - 1
    GUICtrlCreateListViewItem($buchstaben[$y], $list)
    Next
    _GUICtrlListView_SetColumnWidth($list, 1, 0)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $list Then
    ConsoleWrite($code & @CRLF)
    Switch $code
    ;case -2 ;Klick
    Case -3 ;Doppelklick
    If _GUICtrlListView_GetSelectedCount($list) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($list)
    If _GUICtrlListView_GetItemSelected($list, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($list, $i)
    MsgBox(0, "Doppel-Klick auf ", $aItem[1] & @CRLF & $zahlen[$i])
    EndIf
    Next
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    mfg (Auto)Bert

  • das mit dem

    [autoit]

    If $iSelect <> '' Then ...

    [/autoit]

    war mein fehler. nach dem ich diesen ausgebessert hatte war ich auf dem stand meines vorherigen posts

    So in etwa sieht mein csript aus:

    Spoiler anzeigen
    [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $blubb
    ;...
    ;...
    ;...
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($main, '', $list, 'GetSelected')
    If $iSelect <> '' Then
    $iText = ControlListView($main, '', $list, 'GetText', $iSelect, 0)

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

    For $y = 0 to UBound($a) - 1
    if $iText = $a[$y] then $iText = $b[$y]
    Next

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

    For $z = 0 to UBound($c) - 1
    if $iText = $c[$z] then $iText = $d[$y]
    Next

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

    EndIf

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

    Opt("GUIDataSeparatorChar", "#")

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

    $msg = GUICreate("neue GUI", 100, 100)
    $buttonX = GUICtrlCreateButton("button", 20, 30, 25, 25)
    GUISetState()

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

    main()

    Case $bla
    ;...
    ;...
    ;...
    EndSwitch
    WEnd

    Func main()
    ;...
    ;...
    ;...
    EndFunc

    [/autoit]

    PS: sry das ich keinen spoiler verwendet hatte. nehme ich normalerweise schon, jedoch fand ich meinen code nicht übermäßig lang..
    werde es aber demnächst aber sicher mit spoiler machen ;)

  • EDIT

    hab den fehler wohlmöglich gefunden.
    melde mich nochmal..

    EDIT2:

    so habs nun lange und intensiv getestet und komme zu dem ergebnis das es leider immer noch nicht funktioniert, ich jedoch die ursache gefunden habe.
    es liegt daran das die variablen $a und $b nicht durch Global wie im beispiel-script definiert werden, sondern diese durch auslesen eines textes entstehen..

    wenn ich an meinem bisher ja leider nicht funktionierenden script lediglich das ausfiltern mit StringRegExp weg lasse und die variablen durch global willkürliche werte zuweiße, dann funktioniert alles reibungslos...
    warum ist das so?

    ich brauche ja die ausgefilterten werte ?(

    hier mein vereinfachtes script ohne StringRegEx : (funktioniert)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    Global $a[3]
    $a[0] = "A"
    $a[1] = "B"
    $a[2] = "C"

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

    Global $b[3]
    $b[0] = "1"
    $b[1] = "2"
    $b[2] = "3"

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

    $main = GUICreate("test", 180, 700)
    $list = GUICtrlCreateListView("test: ", 8, 15, 165, 670)

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

    For $y = 0 to UBound($a) - 1
    GUICtrlCreateListViewItem($a[$y], $list)
    GUICtrlSetColor(-1, 0x00C000)
    Next

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

    GUISetState()

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

    While 1
    $test = GUIGetMsg()
    Switch $test
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($main, '', $list, 'GetSelected')
    If $iSelect <> '' Then
    $iText = ControlListView($main, '', $list, 'GetText', $iSelect, 0)

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

    For $z = 0 to UBound($a) - 1
    if $iText = $a[$z] then $iText = $b[$z]
    Next

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

    $send_window = GUICreate("test2", 200, 100)
    $bum = GUICtrlCreateButton("ach", 60, 30, 70, 25)

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

    GUISetState()

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

    main()

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

    EndIf
    EndSwitch
    WEnd

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

    Func main()

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

    While 1
    $send_window = GUIGetMsg()
    Switch $send_window
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE)
    ExitLoop
    Case $bum
    MsgBox(0, "", "hallo")
    EndSwitch
    WEnd

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

    EndFunc ;==>main

    [/autoit]

    wer kann mir sagen wie das auch funktioniert wenn die $a und $b durch StringRegExp entstehen?

    2 Mal editiert, zuletzt von Inferior (22. Juli 2010 um 21:24)

  • so nochmal ein versuch..
    mein vereinfachtes script verhält sich so, dass es nach dem ersten klick auf ein ListViewItem egal ist wohin man klickt es wird ständig die letzte msgBox geöffnet... :(
    wer kann mir sagen warum das so ist???

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $a[5]
    $a[0] = "hans"
    $a[1] = "fritz"
    $a[2] = "karl"
    $a[3] = "keinz"
    $a[4] = "josef"

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

    Global $b[5]
    $b[0] = "123456"
    $b[1] = "654321"
    $b[2] = "13579"
    $b[3] = "246810"
    $b[4] = "321456"

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

    $hGui = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 60)

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

    For $y = 0 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($hGui, '', $hListView, 'GetSelected')
    If $iSelect <> '' Then
    $iText = ControlListView($hGui, '', $hListView, 'GetText', $iSelect, 0)
    MsgBox(0, "", $b[$iSelect])
    EndIf
    EndSwitch

    [/autoit]


    WEnd

    • Offizieller Beitrag

    Ach Mist!
    Ist ja klar, weil dann bereits ein Item selektiert ist.
    Musst die Selektion nach der Abfrage wieder löschen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $a[5]
    $a[0] = "hans"
    $a[1] = "fritz"
    $a[2] = "karl"
    $a[3] = "keinz"
    $a[4] = "josef"

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

    Global $b[5]
    $b[0] = "123456"
    $b[1] = "654321"
    $b[2] = "13579"
    $b[3] = "246810"
    $b[4] = "321456"

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

    $hGui = GUICreate("test", 200, 500)
    $hListView = GUICtrlCreateListView("Werte:", 10, 20, 180, 60)

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

    For $y = 0 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$y], $hListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $iSelect = ControlListView($hGui, '', $hListView, 'GetSelected')
    If $iSelect <> '' Then
    $iText = ControlListView($hGui, '', $hListView, 'GetText', $iSelect, 0)
    MsgBox(0, "", $b[$iSelect])
    EndIf
    ControlListView($hGui, '', $hListView, 'SelectClear')
    EndSwitch
    WEnd

    [/autoit]
  • danke oscar habs ca. 5 min vor deinem post selbst heraus gefunden
    jetzt klappt alles wunderbar!

    vielen dank nochmal an alle die dazu beigetragen haben


    - > closed