bestimmte Zeile in ListView markieren

  • Hallo,

    ich glaube ich steh gerade auf dem Schlauch, aber ich finde nirgends, wie ich eine Zeile in einem ListView aktivieren kann (d.h. also das sie bei mir 'blau' wird).

    Also ich meine NICHT mit der Maus draufklicken :)

    Ich durchsuche eine ListView und wenn die passende Zeile gefunden ist, soll sie aktiviert werden.

    Vielen Dank
    viele Grüße
    Carsten

    • Offizieller Beitrag

    Zitat Hilfe:

    Hier ein Bsp.:

    [autoit]

    #Include <GuiListView.au3>

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

    For $i = 0 To _GUICtrlListViewGetItemCount($listview)-1
    If _GUICtrlListViewGetItemText($listview, $i) = $vergleichsbegriff Then
    _GUICtrlListViewSetHotItem($listview, $i)
    EndIf
    ExitLoop
    Next

    [/autoit]
  • In einem AutoIt-List-View, also von mir erstellt.

    Das mit dem Hot-Item habe ich auch gefunden, aber in dem Hilfe-Beispiel wird zwar der Status Hot-Item gesetzt, aber die Zeile wird nicht blau markiert.

    Ich möchte per Software genau das gleiche erreichen, als wenn man mit der Maus draufklickt, d.h. die Zeile wird blau, aktiv und weil die Zeile aktiv wird, werden zusätzliche Infos in einer weiteren Tabelle angezeigt.

    Ich habe meine Maske (etwas retuschiert aus Datenschutzgründen) beigefügt, damit wird vielleicht klarer was ich machen möchte.

    Die Knopf-Leiste links wird erstellt aus den Kurzzeichen der Namen, die in der oberen List-View stehen. Wenn ich auf einen Knopf drücke wird oben der entsprechende Eintrag ausgewählt. Im Grunde geht es mir hier um eine zweite Auswahlmöglichkeit, die schneller ist als die Listenauswahl, wenn man man die Kürzel der Person kennt. Ein Verzicht auf die Liste ist aber nicht sinnvoll, da man sonst evtl. nicht erkennen kann wer hinter dem Kürzel steht.

    Ich bin nun mal ein Freund von verschiedenen Wegen nach Rom, da jeder Mensch eine andere Arbeitsweise hat und sich so seinen passenden Weg raussuchen kann :)

    Vielen Dank
    Viele Grüße
    Carsten

  • Ja, schon, das ganze Programm ist allerdings sehr groß und ich suche 'nur' nach einem kleinen Befehl :)

    Dies ist der Bereich, der bei Druck auf einen Knopf der Knopfleiste den passenden Listeneintrag in der oberen List-View heraussucht:

    [autoit]

    case $msg >= $bu_adr[1] and $msg <= $bu_adr[20]
    $text2 = GUICtrlRead($msg)

    for $i = 0 to _GUICtrlListViewGetItemCount($list_personal)
    $ret = _GUICtrlListViewGetItemText ($list_personal,$i)
    If ($ret <> $LV_ERR) Then
    $text = StringLeft($ret,StringLen($text2))
    if $text = $text2 then
    MsgBox(0, "Selected Item", $ret) ; HIER WEITER
    GUICtrlSetState ( $list_personal, $GUI_FOCUS )

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

    EndIf
    EndIf
    Next

    [/autoit]

    Ich weiß nicht ob noch andere Teile Sinn machen?

    Carsten

    Einmal editiert, zuletzt von Carsten (18. Januar 2007 um 09:44)

  • Ne, das funktioniert. Er zeigt mir dann den Namen des Knopfes und ich kann daraufhin die Liste nach dem identischen Anfang durchsuchen um den Listeneintrag zu finden.

    mein Problem liegt bei 'Weiter Hier' bzw. bei der Zeile: GUICtrlSetState ( $list_personal, $GUI_FOCUS ).

    Hier Soll der identisch gefundene Eintrag in der Liste AKTIVIERT werden, d.h. machen als ob ich mit der Maus draufgeklickt hätte. Wie kann ich eine ganz bestimmte Zeile einer List-View aktivieren?

    Mein Versuch oben mit GUI_Focus funktioniert aber nicht.

    Das ist was ganz einfaches glaube ich, irgendwie glaube ich dass ich das auch schon mal gemacht habe, aber ich steh wohl wirklich gerade auf dem Schlauch.

    Grüße
    Carsten

    Einmal editiert, zuletzt von Carsten (18. Januar 2007 um 10:31)

    • Offizieller Beitrag

    So, jetzt hab ich eine funktionierende Lösung für dich.
    Mit _GUICtrlListViewSetItemSelState( ) kannst du den Eintrag markieren - ist dann aber grau markiert. Also noch ein {DOWN} hinterher und schon ist es blau markiert :)

    [autoit]

    _GUICtrlListViewSetItemSelState($listview, $index, 1, 1)
    Send("{DOWN}")

    [/autoit]
  • Ja SUPPPPEEEERRRRRR,

    das war der entscheidende Hinweis, vielen Dank.

    Den Befehl _GUICtrlListViewSetItemSelState() hatte ich auch 'in der Hand', aber wohl was falsch gemacht.

    Nur der Send-Befehl Befehl lässt sich sparen, wenn man vorher die List-Gui in den Focus setzt:

    [autoit]

    GUICtrlSetState ( $list_personal, $GUI_FOCUS )
    _GUICtrlListViewSetItemSelState($list_personal, $i, 1, 1)
    Send("{right}")

    [/autoit]

    Der Send-Befehl nach Rechts bringt einfach nur die markierte Zeile in den sichtbaren Bereich (falls notwendig weil nicht alle Zeilen in das Fenster passen) - Danke für die Idee 'send' zu verwenden.

    Wirklich Super - das ist genau so wie ich es mir wünsche - perfekt.

    Ich schicke Dir einen Strauß Blumen per Gedanke
    weil ich jetzt mit mir selbst nicht mehr zanke
    und hoffe dich zu einem Lächeln zu erweichen
    wenn diese Zeilen dich erreichen. ;)


    Vielen Dank
    viele Grüße
    Carsten