Was war jetzt eigentlich an meiner Funktion noch fehlerhaft? Ich hatte das jetzt nicht verstanden.
Mehrere Items in mehrspaltige ListView eintragen?
-
- [ offen ]
-
stinger2k -
27. März 2010 um 00:07 -
Geschlossen -
Erledigt
-
-
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...
-
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>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <array.au3>GUICreate("Sample List View", 230, 300, -1, -1);, $WS_OVERLAPPEDWINDOW)
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc _GUICtrlListView_InsertRow($hWnd, $sText, $iIndex,$sDelimCol = "|",$sDelimRow = @CRLF)
[/autoit]
$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 -
Dann können wir sie ja bei der nächsten version mit in die UDF nehmen
-
Wenn UDF, dann aber auch mit Beschreibung & Beispiel, sowie der Möglichkeit Arrays zu übergeben.
Spoiler anzeigen
[autoit]#include <GuiListView.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("MustdeclareVars",1)
_Example()Func _Example()
[/autoit] [autoit][/autoit] [autoit]
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("")$hListview = _GUICtrlListView_Create($hGUI, "", 20, 20, 360, 360)
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 2
_GUICtrlListView_AddColumn($hListview, "Col " & $i + 1)
_GUICtrlListView_SetColumnWidth($hListview, $i, 120)
Next_GUICtrlListView_AddArray($hListview, $aTestItems)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()MsgBox(64, "Info", "Insert String")
[/autoit] [autoit][/autoit] [autoit]
_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)MsgBox(64, "Info", "Insert Array")
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_InsertRow($hListview, $aTestItems, 2)Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3
EndFunc ;==>_Example; #FUNCTION# ======================================================================================
[/autoit] [autoit][/autoit] [autoit]
; 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')Switch IsArray($aText)
[/autoit] [autoit][/autoit] [autoit]
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)For $i = UBound($aItem) - 1 To 0 Step -1
[/autoit] [autoit][/autoit] [autoit]
$aSub = StringSplit($aItem[$i], $sDelimCol, 3)
If @error Then Return SetError(1, 1, 0)If Not $fAr Then
[/autoit] [autoit][/autoit] [autoit]
Dim $aText[UBound($aItem)][UBound($aSub)]
$fAr = True
EndIfFor $j = 0 To UBound($aSub) - 1
[/autoit] [autoit][/autoit] [autoit]
$aText[$i][$j] = $aSub[$j]
Next
Next
EndSwitchFor $i = UBound($aText) - 1 To 0 Step -1
[/autoit]
_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 -
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 meinVote!!
ab...
Hierbei nochmals meine Anerkennung an euch und eure Ideen... that´s
-
- Offizieller Beitrag
Hinweis:
Wenn Delimiter verwendet werden ist es praktisch das Default-Trennzeichen zu übernehmen.
[autoit]$sDelimCol = Default
[/autoit]
;...
If IsKeyword($sDelimCol) Then $sDelimCol = Opt('GuiDataSeparatorChar') -