Mehrere Items in mehrspaltige ListView eintragen?

  • Was war jetzt eigentlich an meiner Funktion noch fehlerhaft? Ich hatte das jetzt nicht verstanden.

  • garnichts es fehlte nur die 2. for schleife um auch mehrere kopierte items als solche zu trennen.
    Siehe meinen Screenshot nach deinem Post.

    Ich sagte ja dein "Grundgerüst" war goldwert. Nur das deine func nicht mehrere items berücksichtigt, und nur eines einfügt auch bei mehreren kopierten...

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

  • Was war jetzt eigentlich an meiner Funktion noch fehlerhaft? Ich hatte das jetzt nicht verstanden.

    garnichts es fehlte nur die 2. for schleife um auch mehrere kopierte items als solche zu trennen.
    Siehe meinen Screenshot nach deinem Post.

    Ich sagte ja dein "Grundgerüst" war goldwert. Nur das deine func nicht mehrere items berücksichtigt, und nur eines einfügt auch bei mehreren kopierten...

    @m-obi nichts ab Beispiel in #14 funktioniert sie

    Ich habe noch einmal geändert, damit man auch noch den Zeilentrenner mit übergeben kann:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    #include <array.au3>

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

    GUICreate("Sample List View", 230, 300, -1, -1);, $WS_OVERLAPPEDWINDOW)
    $idLV = GUICtrlCreateListView("Sample|ListView", 10, 10, 180, 180);, -1, $LVS_EX_HEADERDRAGDROP)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
    GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1
    GUICtrlCreateListViewItem("A|One", $idLV)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    GUICtrlCreateListViewItem("B|Two", $idLV)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    GUICtrlCreateListViewItem("C|Three", $idLV)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    $idbtnNeu = GUICtrlCreateButton("&Neues Item", 10, 200)

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

    GUISetState()
    $i = GUICtrlRead($idLV)
    ConsoleWrite($i & @CRLF)
    _GUICtrlListView_SetColumnWidth($idLV, "xy|ngelöst", $i)
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idbtnNeu
    $i = _GUICtrlListView_GetSelectedIndices($idLV,False)
    ConsoleWrite($i & @CRLF)
    _GUICtrlListView_InsertRow($idLV, "Test|456" & @CRLF & "Test|457", $i,"|",@CRLF)
    EndSwitch
    WEnd

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

    Func _GUICtrlListView_InsertRow($hWnd, $sText, $iIndex,$sDelimCol = "|",$sDelimRow = @CRLF)
    $aItem = StringSplit($sText, $sDelimRow, 3)
    For $i = UBound($aItem) - 1 to 0 Step -1
    $aSub = StringSplit($aItem[$i], $sDelimCol, 3)
    If Not @error Then
    _GUICtrlListView_InsertItem($hWnd, $aSub[0], $iIndex)
    For $j = 1 To UBound($aSub) - 1
    _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aSub[$j], $j)
    Next
    EndIf
    Next
    EndFunc ;==>_GUICtrlListView_InsertRow

    [/autoit]
  • Wenn UDF, dann aber auch mit Beschreibung & Beispiel, sowie der Möglichkeit Arrays zu übergeben.

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    Opt("MustdeclareVars",1)
    _Example()

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

    Func _Example()
    Local $hGUI, $hListview, $aTestItems[3][3] = [["Test 1_1", "Test 1_2", "Test 1_3"],["Test 2_1", "Test 2_2", "Test 2_3"],["Test 3_1", "Test 3_2", "Test 3_3"]]
    $hGUI = GUICreate("")

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

    $hListview = _GUICtrlListView_Create($hGUI, "", 20, 20, 360, 360)
    For $i = 0 To 2
    _GUICtrlListView_AddColumn($hListview, "Col " & $i + 1)
    _GUICtrlListView_SetColumnWidth($hListview, $i, 120)
    Next

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

    _GUICtrlListView_AddArray($hListview, $aTestItems)
    GUISetState()

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

    MsgBox(64, "Info", "Insert String")
    _GUICtrlListView_InsertRow($hListview, "Test Neu 2_1" & @TAB & "Test Neu 2_2" & @TAB & "Test Neu 2_3" & @CRLF & "Test Neu 3_1" & @TAB & "Test Neu 3_2" & @TAB & "Test Neu 3_3", 1, @TAB)

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

    MsgBox(64, "Info", "Insert Array")
    _GUICtrlListView_InsertRow($hListview, $aTestItems, 2)

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

    Do
    Until GUIGetMsg() = -3
    EndFunc ;==>_Example

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _GUICtrlListView_InsertRow()
    ; Description ...: Inserts a row into a ListView. You can specify the Index by yourself
    ; Syntax ........: _GUICtrlListView_InsertRow($hWnd, $sText, $iIndex[, $sDelimCol = "|"[, $sDelimRow = @CRLF]])
    ; Parameters ....: $hWnd - ListVIew Handle
    ; $sText - String or Array to insert. If $sText is a String, you can select your delimiters in $sDelimCol and $sDelimRow
    ; $iIndex - Listview Index to insert at
    ; $sDelimCol - [optional] Delimiter to split $sText with. (default:"|")
    ; $sDelimRow - [optional] Delimiter to split $sText with. (default:@CRLF)
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error to
    ; |1 - Error when splitting the String.
    ; |@extended specifies, weither the it happend while splitting Col (1) or Row(2)
    ; |2 - Array is not 1D or 2D.
    ; Author ........: SEuBo, AutoBert, m-obi (http://www.autoit.de)
    ; Remarks .......:
    ; Link ..........:
    ; Example .......: Yes
    ; =================================================================================================
    Func _GUICtrlListView_InsertRow($hWnd, $sText, $iIndex, $sDelimCol = "|", $sDelimRow = @CRLF)
    Local $aItem, $aSub, $fAr, $aText = $sText
    If IsKeyword($sDelimCol) Then $sDelimCol = Opt('GuiDataSeparatorChar')

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

    Switch IsArray($aText)
    Case True
    If UBound($aText, 0) <> 2 And UBound($aText, 0) <> 1 Then Return SetError(2, 0, 0)
    Case False
    $aItem = StringSplit($aText, $sDelimRow, 3)
    If @error Then Return SetError(1, 1, 0)

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

    For $i = UBound($aItem) - 1 To 0 Step -1
    $aSub = StringSplit($aItem[$i], $sDelimCol, 3)
    If @error Then Return SetError(1, 1, 0)

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

    If Not $fAr Then
    Dim $aText[UBound($aItem)][UBound($aSub)]
    $fAr = True
    EndIf

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

    For $j = 0 To UBound($aSub) - 1
    $aText[$i][$j] = $aSub[$j]
    Next
    Next
    EndSwitch

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

    For $i = UBound($aText) - 1 To 0 Step -1
    _GUICtrlListView_InsertItem($hWnd, $aText[$i][0], $iIndex)
    For $j = UBound($aText, 2) - 1 To 1 Step -1
    _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aText[$i][$j], $j)
    Next
    Next
    Return SetError(0, 0, 1)
    EndFunc ;==>_GUICtrlListView_InsertRow

    [/autoit]
  • Wir könnten ja ein "Voting" machen, ob diese udf es verdient in die nächste Version mitzuübernehmen?

    Ich habe vorher viel gegoogled und keine vergleichbare udf gefunden (auch nicht im engl. Forum)
    also hiermit gebe ich mein

    Vote!!

    ab...

    Hierbei nochmals meine Anerkennung an euch und eure Ideen... that´s :rock:

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o