Что нового

Почему _GUICtrlListView_DeleteAllItems может выдавать ошибку?

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Добрый день!

Заполняю ListView
Удаляю строку из него
Очищаю ListView
Добавляю строку в него
Очищаю ListView и вот тут происходит ошибка (не очищает и выдает False). В чем может быть причина?
Вот кусок кода, хотя вряд ли поможет
Код:
If Not @error Then
                $hFile = ""
                For $i = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
                    $Text = ''
                    For $j = 1 To _GUICtrlListView_GetColumnCount($iListView) - 1
                        $Text = $Text & _GUICtrlListView_GetItemText($iListView, $i, $j) & ';'
                    Next
					$hFile = $hFile&$Text&@CRLF
                Next
            EndIf
			MsgBox(0, "", $hFile)
			;----------------------------
			_GUICtrlListView_DeleteAllItems($iListView)
			MsgBox(0,"", _GUICtrlListView_DeleteAllItems($iListView))

			MsgBox(0, "", $hFile)
            If Not @error Then
                For $i = 1 To 5 
                    $Text = StringReplace($hFile, ';', '|')
                    $Text = $i & '|' & StringTrimRight($Text, 1)
                    GUICtrlCreateListViewItem($Text, $iListView)
                Next
            EndIf
			$hFile = ""
			$Text = ''
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Проблема в том, что вы пытаетесь добавить пункт, содержащий больше колонок, чем есть в ListView. На версии 3.3.8.1 функция GUICtrlCreateListViewItem() возвращала ошибку, но пункт добавляла. Дальнейшая работа с такими пунктами приводила к проблемам (это ваш случай). На версии 3.3.14.2 подобные пункты просто не добавляются.
Посмотрите, что вы пытаетесь добавить в качестве пункта
Код:
...
                    $Text = $i & '|' & StringTrimRight($Text, 1)
                    MsgBox(0,'',$Text) ; <= убедитесь в корректности добавляемого текста
                    GUICtrlCreateListViewItem($Text, $iListView)
                    ...
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Извиняюсь, но глядя на создаваемую программу, Вы создаете ексель. Может я не знаю некоторых нюансов, но можно же попросить сотрудников вводить данные в ексель, а потом Ваша программа будет считывать данные из екселя и записывать куда Вам нужно. Кстати, в предыдущей теме вы говорили о необходимости выгрузки данных в текстовый файл, как я понимаю для отправки и для дальнейшего считывания данных Вашей программой. Может для этого лучше подойдет SQLite? Или можно еще проще, заполняют файлы ексель и отправляют их, а Ваша программа все данные приводит к общему знаменателю и вводит в 1С
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
OffTopic:
Дайте человеку со справкой разобраться. Чтобы хоть как-то кашу в голове рассортировать.
Точнее, тут не то что "дать разобраться", а, скорее, помочь научиться её читать
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Vovsla сказал(а):
Извиняюсь, но глядя на создаваемую программу, Вы создаете ексель. Может я не знаю некоторых нюансов, но можно же попросить сотрудников вводить данные в ексель, а потом Ваша программа будет считывать данные из екселя и записывать куда Вам нужно. Кстати, в предыдущей теме вы говорили о необходимости выгрузки данных в текстовый файл, как я понимаю для отправки и для дальнейшего считывания данных Вашей программой. Может для этого лучше подойдет SQLite? Или можно еще проще, заполняют файлы ексель и отправляют их, а Ваша программа все данные приводит к общему знаменателю и вводит в 1С

Нет, на самом деле все совсем по иному состоит. Я боролся с уже готовой программкой, которую помогли написать тут.
Вот оно: http://autoit-script.ru/index.php?topic=21754.0
Она работает великолепно и так как мне надо!!!!!!!! Но возникла необходимость дополнить ее возможностью удаления (НЕ редактирования) строк.
Сперва сильно застопорился на том, что не смог получить номер удаляемой строки, именно поэтому пошел по пути, который указан в данной теме.
Т.е. как то получаю номер строки, удаляю ее, выгружаю полученное в файл, обнуляю ListView, загружаю обратно.
Да-да-да странный алгоритм :(, но уперся в проблему, решить не мог сразу, а время горело.
Так оно работало, НО! готовое выгружалось в файл, подумал и решил сделать то же самое, но выгружая ЭТО в переменную. и вот на этом этапе и споткнулся, некий средний вариант указан тут.
Чуть спустя местные гуру подсказали как получить номер строки, попробовал - получилось великолепно!
В итоге получилось так, что путь, по которому просил помощи оказался, эм,.... слишком извилистым и ненужным и именно поэтому и отказался от него :smile:

Конечно решение получилось более коротким, красивым и ваще я им доволен :smile: (там еще нумерация строк пересчитывается). Примерно так.


Добавлено:
Сообщение автоматически объединено:

joiner сказал(а):
OffTopic:
Дайте человеку со справкой разобраться. Чтобы хоть как-то кашу в голове рассортировать.
Точнее, тут не то что "дать разобраться", а, скорее, помочь научиться её читать

Ну что то типа того :smile: очень долго читал ее пытался найти нужную Функцию, потратил день и как то проскочил мимо :(
В итоге подсказали волшебное слово: _GUICtrlListView_GetSelectedIndices - Возвращает индексы выделенных пунктов. Как я ее пропустил - сам удивляюсь!!!!!!!!!!!
Но подсказали и поперло!!!!!!!!!
Я прям доволен до жути! :IL_AutoIt_1:
 
Верх