ListView , Button und Input Problem

  • Hallo Community :)

    Ich habe folgendes Problem, unzwar habe ich eine GUI mit einer ListView, einem Button und einem Input. Ich bin am Versuch gescheitert per Buttonklick aus der ListView ein Feld das man makiert hat auszulesen und nur die Spalte Nummer zu nehmen und ins Input zu packen.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #Include <GuiListView.au3>

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

    $h_Gui = GUICreate("Form1", 203, 299, 192, 124)
    $h_ListView = GUICtrlCreateListView("", 8, 8, 185, 214,BitOR($LVS_REPORT, $LVS_NOSORTHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $WS_VSCROLL), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    $ListViewHandle = GUICtrlGetHandle(-1)
    $h_Objekt_Button = GUICtrlCreateButton("Objekt in Input laden", 8, 232, 187, 25, $WS_GROUP)
    $h_Input = GUICtrlCreateInput("", 9, 264, 183, 21)
    GUISetState(@SW_SHOW)

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

    _GUICtrlListView_AddColumn($h_ListView,"Nummer",80)
    _GUICtrlListView_AddColumn($h_ListView,"Name",80)

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

    Global $File = @ScriptDir & "\List.txt"
    If FileExists($File) Then _LoadList()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _LoadList()
    $HandleFile = FileOpen($File, 0)
    If $HandleFile <> -1 Then
    _GUICtrlListView_BeginUpdate($h_ListView)
    While True
    $Item = FileReadLine($HandleFile)
    If @error Then ExitLoop
    GUICtrlCreateListViewItem($Item, $h_ListView)
    WEnd
    _GUICtrlListView_EndUpdate($ListViewHandle)
    FileClose($HandleFile)
    EndIf

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

    EndFunc

    [/autoit]

    #Edit: Im Anhang noch die List.txt .

  • Halo volle,

    dafür gibt es viele Möglichkeiten, ich bevorzuge:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #Include <GuiListView.au3>

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

    $h_Gui = GUICreate("Form1", 203, 299, 192, 124)
    $h_ListView = GUICtrlCreateListView("", 8, 8, 185, 214,BitOR($LVS_REPORT, $LVS_NOSORTHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $WS_VSCROLL), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    $ListViewHandle = GUICtrlGetHandle(-1)
    $h_Objekt_Button = GUICtrlCreateButton("Objekt in Input laden", 8, 232, 187, 25, $WS_GROUP)
    $h_Input = GUICtrlCreateInput("", 9, 264, 183, 21)
    GUISetState(@SW_SHOW)

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

    _GUICtrlListView_AddColumn($h_ListView,"Nummer",80)
    _GUICtrlListView_AddColumn($h_ListView,"Name",80)

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

    Global $File = @ScriptDir & "\List.txt"
    If FileExists($File) Then _LoadList()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $h_Objekt_Button
    $aItem = _GUICtrlListView_GetItemTextArray($h_ListView)
    GUICtrlSetData($h_Input,$aItem[1])
    EndSwitch
    WEnd

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

    Func _LoadList()
    $HandleFile = FileOpen($File, 0)
    If $HandleFile <> -1 Then
    _GUICtrlListView_BeginUpdate($h_ListView)
    While True
    $Item = FileReadLine($HandleFile)
    If @error Then ExitLoop
    GUICtrlCreateListViewItem($Item, $h_ListView)
    WEnd
    _GUICtrlListView_EndUpdate($ListViewHandle)
    FileClose($HandleFile)
    EndIf

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

    EndFunc

    [/autoit]

    mfg autoBert

  • Hallo AutoBert,

    ich habe mal dein Beispiel getestet, aber er liest die ganze Zeile doch bei

    [autoit]

    _GUICtrlListView_GetItemTextArray

    [/autoit]


    aus.
    Ich wollte ja so das er nur die aus der von mir makierten Zeile die Spalte "Nummer" ausliest und die Nummer die dort steht ins Input per GUICtrlSetData geschrieben wird.

    Mit freundlichen Grüßen

    volle

    • Offizieller Beitrag

    Scheinbar hast du das Beispiel nicht ausgeführt, genau das macht doch das Script von Autobert.

  • Entweder stell ich mich zu doof an oder es funktioniert wirklich nicht. 8|

    • F5 Drücken
    • Zeile makieren
    • Button klicken
    • Input trotzdem weiterhin leer ?(

    Mit freundlichen Grüßen

    volle

    • Offizieller Beitrag

    Dann würde ich sagen bei dir is was im Eimer.

    # F5 Drücken
    # Zeile makieren
    # Button klicken
    # Input hat Nummer des gewählten Eintrages

  • Halo volle,

    stimmt _GUICtrlListView_GetItemTextArray liest die Infos der ganzen Zeile, aber

    Zitat von Hilfe zu _GUICtrlListView_GetItemTextArray

    Erfolg: Array mit dem folgenden Format:
    [0] - Anzahl von Spalten im Array (n)
    [1] - Erster Spaltenindex
    [2] - Zweiter Spaltenindex
    [n] - Letzter Spaltenindex

    Quelle: dt. Hilfe

    und mit

    [autoit]

    $aItem = _GUICtrlListView_GetItemTextArray($h_ListView);holt alle Spalten der Zeile
    GUICtrlSetData($h_Input,$aItem[1]) ;Spalte 1 in Input übernehmen

    [/autoit]

    werte ich nur die 1. Spalte aus.

    Was soll bei mir im Eimer sein, nur weil ein Script nicht richtig ausgeführt wird?

    Vielleicht solltest du dein Windows neu aufsetzen,

    Edit: du kannst aber genauso

    [autoit]

    $aItem = StringSplit(GUICtrlRead(GUICtrlRead($h_ListView)),"|")
    GUICtrlSetData($h_Input,$aItem[1])

    [/autoit]

    verwenden,

    mfg autoBert

  • Ich habe es mal auf Laptop getestet, dort funktioniert es auch nicht, mein PC und Laptop haben Windows XP Home Edition SP3. Vielleicht liegt es daran, was ich aber nicht befürchte

    Mit freundlichen Grüßen

    volle

  • Ich habe es mal auf Laptop getestet, dort funktioniert es auch nicht, mein PC und Laptop haben Windows XP Home Edition SP3. Vielleicht liegt es daran, was ich aber nicht befürchte


    Nein an Win XP SP3 liegt es sicherlich nicht, denn mein NetBook hat das gleiche BS. Ich befürchte, dass du das Skript aus Post#2 abgeändert hast und es dadurch nicht läuft.

    @all: bitte Skript aus Post#2 testen und Rückmeldung,

    mfg autoBert

  • Ah, ich danke dir AutoBert.
    Nicht sowie Raupi sagte, gleich den PC neu aufsetzen.
    Nach der Variante wie du es sagtest funktioniert es auch.
    Ich hatte es nämlich nur angepasst und das alte Script so gelassen und nur die 2 Zeilen hinzugefügt. :)

    Mit freundlichen Grüßen

    volle

    • Offizieller Beitrag
    Zitat

    Ich hatte es nämlich nur angepasst und das alte Script so gelassen und nur die 2 Zeilen hinzugefügt. :)


    Dir gehört der Titel "Held im Erbeerfeld" verliehen.

    Zitat

    Nicht sowie Raupi sagte, gleich den PC neu aufsetzen.


    Wann ich das behauptet habe weiß ich nicht, vielleicht leide ich an Alzheimer.
    Wenn man dich fragt ob Autoberts Script läuft und von dir dann die Aussage kommt das es nicht funzt,
    macht man sich halt Gedanken....
    Leider habe ich meine Glaskugel noch nicht mit dem BS 3.5 aufgerüstet und mein Vodomaster hat gerade Urlaub.

    Zitat

    Ich habe es mal auf Laptop getestet, dort funktioniert es auch nicht, mein PC und Laptop haben Windows XP Home Edition SP3. Vielleicht liegt es daran, was ich aber nicht befürchte

    95 % aller Fehler werden auf das BS geschoben und der tatsächliche Fehler befindet sich zwischen Stuhl und Tastatur :rofl:

    [Sarkaskus]

    Zitat

    Entweder stell ich mich zu doof an oder es funktioniert wirklich nicht. 8|


    Diese Feststellung kannst du dir ja jetzt mal verinnerlichen.
    [/Sarkaskus]