Что нового

Вопрос по классу элементов SysListView32?

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Почему после выделения строки в списке функцией ControlListView, спустя доли секунды выделение самопроизвольно переносится в самое начало списка (List)? В чем может быть причина такого поведения и как ее устранить?

Вот отрывок кода где возникает сия проблемка:
Код:
$Pe = True

While $Pe = True
If  $NumberLine = False Then
	$NumberLine = 0
	EndIf
$Pe = ControlListView("Окно", "", "SysListView321", "GetText", $NumberLine, 2)
If  $Pe = "9" Or $Pe = "8" Or $Pe = "7" Then
	ControlListView("Окно", "", "SysListView321", "Select", $NumberLine)
	$Pe = False
EndIf
$NumberLine += 1
WEnd


Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Kalisnik [?]
Почему после выделения строки в списке функцией ControlListView, спустя доли секунды выделение самопроизвольно переносится в самое начало списка
Судя по всему функций ControlListView передан параметр несуществующего индекса в списке (когда в цикле он увеличивается), он по умолчанию выделяет первый попавшийся.

А если так:

Код:
$NumberLine = 0

While 1
     $Pe = ControlListView("Окно", "", "SysListView321", "GetText", $NumberLine, 2)
     
     If  $Pe >= "7" And $Pe <= "9" Then
          ControlListView("Окно", "", "SysListView321", "Select", $NumberLine)
          ExitLoop
     EndIf

    $NumberLine += 1
WEnd
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
CreatoR сказал(а):
Мда... Если сравнивать эти два кода, то мой похож ммм... на суетливый топор. Ваш же напротив, легок и элегантен. :smile: А что значит единица после While? И есть ли в AutoIt что-то подобное как "Go, to.." в VB? Когда можно возвращаться в более ранний участок кода?

Только.. возможно я ошибаюсь, но в Вашем варианте, в случае отсутствия совпадений, цикл принимает вид бесконечности? 0_0 И я немного упростил значения переменной $Pe, она имеет следующие строковые значение: 1/10, 2/10...9/10, 10/10. В такой ситуации выражение
Код:
$Pe >= "7" And $Pe <= "9"
сработает?

И я думаю что Вы правы по поводу несуществующего индекса списка (потому как он действительно все время изменяется), только как Ваш вариант кода может помочь в этом случае? Видимо надо искать зацепки не в индексах, а в названиях строк, что бы устранить эту проблему. Но выделение строк по их названию тоже не проходит...

А вообще здорово что есть такой форум!! И люди, готовые помогать! Со временем буду вносить свой посильный вклад в сей проект. ;)


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

:laugh: Разобрался я в чем дело!!! Оно вовсе не в индексах, а в моей глупости. :IL_AutoIt_1: Суть в том, что до приведенного отрывка кода, в сценарии выполняется еще ряд выделений в других списках окна - и от данных действий зависит содержимое рассматриваемого здесь списка. А значит, каждый раз когда я запускаю сценарий на выполнение список "SysListView321" обновляется, а вот выделение в выше приведенном коде происходит до обновления списка "SysListView321". Именно по этому выделение каждый раз сбрасывалось в начало списка. Проблема решилась добавлением таймера перед началом приведенного цикла.
Я извиняюсь что с самого начала не в вел в полный курс дела, а уже начал чего-то спрашивать :blink:.
Спасибо. )
 
Верх