Что нового

Не могу удалить строки из ListView

BizSV

Новичок
Сообщения
16
Репутация
0
Всем доброго дня.

Есть ini файл.
Данные из него записываются в ListView при нажатии на кнопку "update".
Если нажать на кнопку "del" ListView должен очищаться, но у меня это не получается.

Прошу помощи.

Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>


Global $iListView



Opt("GUIOnEventMode", 1)  ; выбираем режим OnEvent mode 

GUICreate ('PSV_Конфигуратор', 1000, 600) ; создаем окно

$iListView = GUICtrlCreateListView('', 2, 2, 996, 200) ; создаем ListView
_GUICtrlListView_SetExtendedListViewStyle($iListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))  ; стиль списка с разделителями и выделением всей строки 


_GUICtrlListView_AddColumn($iListView, 'ID', 50)
_GUICtrlListView_AddColumn($iListView, 'Статус', 50)
_GUICtrlListView_AddColumn($iListView, 'Тип', 50)
_GUICtrlListView_AddColumn($iListView, 'Путь', 580)
_GUICtrlListView_AddColumn($iListView, 'Последний запуск', 120)
_GUICtrlListView_AddColumn($iListView, 'Следующий запуск', 120)






$button_update = GUICtrlCreateButton("update", 220, 220, 100, 30)
GUICtrlSetOnEvent ($button_update, "_button_update_")

$button_del = GUICtrlCreateButton("del", 220, 280, 100, 30)
GUICtrlSetOnEvent ($button_del, "_button_del_")


GUISetState() ; показываем окно

GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSE_") ; указываем функцию выполняемую при закрытии окна ($GUI_EVENT_CLOSE)

While 1
	
	
	Sleep (5000)
	
	
WEnd



Func _button_update_ () ; 
	
	Func_Udate_List() ; 
	
EndFunc

Func _button_del_ () ;  .
	
	For $i = 0 to _GUICtrlListView_GetItemCount($iListView) - 1
		
		MsgBox(4160, "Deleted?", _GUICtrlListView_DeleteItem($iListView, $i))
		
	Next
	
	
;~ 	MsgBox(4160, "Deleted?", _GUICtrlListView_DeleteAllItems($iListView))
	MsgBox(4160, "Information", "Column Count: " & _GUICtrlListView_GetItemCount($iListView))

;~ 	_GUICtrlListView_Destroy ($iListView)
	
EndFunc


Func _CLOSE_ () ;  функция выполняемая при закрытии окна ($GUI_EVENT_CLOSE)
	
	Exit
	
EndFunc

Func Func_Udate_List () ; 
	
	Local $aItems [100][6] ; массив строк списка

	$arr_job_ini = IniReadSectionNames("job.ini")  ;считываем секции job.ini и помещаем их в массив $arr_job_ini

	For $i = 1 To $arr_job_ini[0]
		
		$aItems[$i-1][0] = $arr_job_ini [$i] ; номер задания (1)
		
		;************************************************
		
		$aItems[$i-1][1] = Number (IniRead ( "job.ini", $arr_job_ini [$i], "run", "0" ))  ; статус задания (2)
		
		if $aItems[$i-1][1] = 1 Then
			
			$aItems[$i-1][1] = "вкл"
			
		Else
			
			$aItems[$i-1][1] = "выкл"
			
		EndIf
		
		;************************************************
		
		$aItems[$i-1][2] = Number (IniRead ( "job.ini", $arr_job_ini [$i], "type", "1" ))  ; тип задания (3)
		
		if $aItems[$i-1][2] = 1 Then $aItems[$i-1][2] = "норм"
		
		if $aItems[$i-1][2] = 2 Then $aItems[$i-1][2] = "инкр"
		
		if $aItems[$i-1][2] = 3 Then $aItems[$i-1][2] = "диф"
		
		;************************************************
		
		$aItems[$i-1][3] = IniRead ( "job.ini", $arr_job_ini [$i], "folder", "default_path" )  ; путь задания (4)
		
		if $aItems[$i-1][3] = "default_path" Then $aItems[$i-1][3] = "Не определено"
		
		;************************************************
		
		$aItems[$i-1][4] = IniRead ( "job.ini", $arr_job_ini [$i], "last_run", "default_run" )  ; путь задания (4)
		
		if $aItems[$i-1][4] = "default_run" Then $aItems[$i-1][4] = "Не определено"	
		
		;************************************************
		
		$aItems[$i-1][5] = IniRead ( "job.ini", $arr_job_ini [$i], "next_run", "default_run" )  ; путь задания (4)
		
		if $aItems[$i-1][5] = "default_run" Then $aItems[$i-1][5] = "Не определено"		
		
	Next
	
	
	ReDim $aItems[$arr_job_ini[0]][6] ; подгоняем размер массива

	_GUICtrlListView_AddArray($iListView, $aItems) ; вывод данных из массива в список
	
	
	
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
BizSV,
1. _GUICtrlListView_DeleteAllItems удалит все строки (вроде надо в нее Handle передавать).
2. Если по одной строке удалять, то цикл должен быть For $i = $iCount - 1 To 0 Step -1...
 
Автор
B

BizSV

Новичок
Сообщения
16
Репутация
0
:( нет эти оба способа не работают, я их испробывал прежде чем вопрос задавать.

Но проблему решил :laugh:
Может кому пригодится:

Код:
Func _button_del_ () 
	
	GUICtrlSendMsg($iListView, $LVM_DELETEALLITEMS, 0, 0)

EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
BizSV [?]
эти оба способа не работают, я их испробывал прежде чем вопрос задавать.
Плохо пробовали:
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Local $hGui, $hLV, $iBtnAdd, $iBtnDelAll, $iBtnDelCycle, $iTmp

$hGui = GUICreate('Test LV', 340, 350)
$hLV = GUICtrlGetHandle(GUICtrlCreateListView('ID|Статус|Тип|Путь', 2, 2, 336, 300))
_GUICtrlListView_SetExtendedListViewStyle($hLV, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
$iBtnAdd = GUICtrlCreateButton('Заполнить LV', 10, 310, 100, 30)
$iBtnDelAll = GUICtrlCreateButton('DeleteAllItems', 120, 310, 100, 30)
$iBtnDelCycle = GUICtrlCreateButton('Delete Items Cycle', 230, 310, 100, 30)
GUISetState()
_Add_LV_RandomArray($hLV)
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $iBtnAdd
			_Add_LV_RandomArray($hLV)
		Case $iBtnDelAll
			_GUICtrlListView_DeleteAllItems($hLV)
		Case $iBtnDelCycle
			$iTmp = _GUICtrlListView_GetItemCount($hLV)
			If Not $iTmp Then ContinueLoop
			For $i = $iTmp - 1 To 0 Step -1
				_GUICtrlListView_DeleteItem($hLV, $i)
			Next
;~ 			или так можно:
;~ 			For $i = 0 To $iTmp - 1
;~ 				_GUICtrlListView_DeleteItem($hLV, 0)
;~ 			Next
			$iTmp = 0
	EndSwitch
WEnd

Func _Add_LV_RandomArray($h_LV, $i_Ub2 = 4)
	Local $i_Tmp = Random(100, 200, 1), $a_Tmp[$i_Tmp][$i_Ub2]

	_GUICtrlListView_DeleteAllItems($h_LV)
	For $i = 0 To $i_Tmp - 1
		For $j = 0 To $i_Ub2 - 1
			$a_Tmp[$i][$j] = Random(10, 50, 1)
		Next
	Next
	_GUICtrlListView_AddArray($h_LV, $a_Tmp)
EndFunc   ;==>_Add_LV_RandomArray
 
Верх