powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбор строки в ListBox
20 сообщений из 20, страница 1 из 1
Выбор строки в ListBox
    #37767757
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Неожиданная проблема:
на форме есть ListBox, RowSourseType=0, заполняется так:
1. в текстбоксы вручную вводятся номер и год документа, нажимается кнопка "Поиск"
2. документ выбирается из списка (Grid), номер и год документа заносятся в текстбоксы программно,
вызывается Click() кнопки "Поиск".

В случае 2. все работает нормально, из ListBox выбираю нужную строку и обрабатываю
В случае 1. НЕ МОГУ выбрать нужную строку - по клику на строку с №>1 курсор
устанавливается (возвращается) на первую строку

Может, кто сталкивался с подобной проблемой?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37767803
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А код метода Click() кнопки "Поиск" предлагается угадать присутствующим?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768051
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dag,

Код кнопки "Поиск"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select tdoc
GO TOP
do case
  case Thisform.nrd.Value > 0 .and. Thisform.year.Value > 0
    seek STR(Thisform.year.Value,4)+STR(Thisform.nrd.Value,6,0) order myInd
    if found()
      fnd=recno()
    else
      fnd=-1
    endif
  otherwise
    fnd=0
endcase
DO CASE
	CASE fnd > 0
* документ найден, заполнение объекта List,
* все абсолютно одинаково для обоих случаев 
		Thisform.cmdSv.Enabled=.F.	
		Thisform.cmdEsc.Enabled=.T.	
  CASE fnd = 0
    MESSAGEBOX('Для поиска необходимо задать номер и год',64,'Неполные исходные данные')
  CASE fnd < 0
    MESSAGEBOX('Документ не найден',64,'Результат поиска')
		Thisform.cmdSv.Enabled=.F.	
		Thisform.cmdEsc.Enabled=.T.
ENDCASE
Thisform.Refresh


Так легче стало?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768067
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540,

ListBox, RowSourseType=0

А как заполняется?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768070
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540,

ListBox, RowSourseType=0

А как заполняется?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768121
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
FOR nCnt = 1 TO Thisform.object.ListCount
	Thisform.object.SelectedID(nCnt)=.F.
ENDFOR
Thisform.object.clear

IF fnd > 0
	GO fnd
ELSE
	RETURN 
ENDIF
SELECT tdoc
SCATTER FIEL name_ob MEMVAR MEMO
*!* в мемо name_ob так:
*!* <имя1>*<дата1> CHR(13)
*!* <имя1>*<дата1> CHR(13)
*!* <имя1>*<дата1> CHR(13)
*!* ...
IF !EMPTY(s)
        s=CHR(13)+ALLT(m.name_ob)
	FOR qw=1 TO OCCURS(CHR(13),s)-1
	  ss=SUBS(s,ATC(CHR(13),s,qw)+1,ATC(CHR(13),s,qw+1)-ATC(CHR(13),s,qw)-1)
	  ss=CHRTRAN(ss,CHR(10),'')
	  IF !EMPTY(LEFT(ss,ATC('*',ss)-1))
	    Thisform.object.AddListItem(LEFT(ss,ATC('*',ss)-1),qw,1)
	    Thisform.object.AddListItem('  '+SUBS(ss,ATC('*',ss)+1,LEN(ss)-ATC('*',ss)),qw,2)
	  ENDIF
	ENDFOR
ENDIF


...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768162
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть уверенность в том, что позиционирование идет в нужной таблице? Попробуй изменить этот кусок следующим образом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF fnd > 0
SELECT tdoc
	GO fnd
SCATTER FIEL name_ob MEMVAR MEMO
ELSE
	RETURN 
ENDIF
*SELECT tdoc
*SCATTER FIEL name_ob MEMVAR MEMO
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768198
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DagЕсть уверенность в том, что позиционирование идет в нужной таблице? Попробуй изменить этот кусок следующим образом
Уверенность есть, проверял. К тому же вариант 2. ведь работает...
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768284
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Уверенность есть, проверял. К тому же вариант 2. ведь работает...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF fnd > 0
	GO fnd
ELSE
	RETURN 
ENDIF
SELECT tdoc && Если есть уверенность - тогда зачем эта строка ?? 

SCATTER FIEL name_ob MEMVAR MEMO
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37768296
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dag,

ну, лишняя.. и что? не то обсуждаем. мне интересно, почему листбокс глючит (см. топик)
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37769522
Гость555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540

Я так понимаю, что при щелчке по листбоксу указатель прыгает на ПЕРВУЮ ЗАПИСЬ В ЛИСТБОКСЕ? Какието методы листбокса запрограммированы?

и не совсем понимаю, зачем делать это
Код: sql
1.
2.
3.
FOR nCnt = 1 TO Thisform.object.ListCount
	Thisform.object.SelectedID(nCnt)=.F.
ENDFOR


если следующей строкой идет очистка
Код: sql
1.
Thisform.object.clear


если только у вас не запрограммирован метод ProgrammaticChange() листбокса.
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37769655
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость555и не совсем понимаю, зачем делать это
Код: sql
1.
2.
3.
FOR nCnt = 1 TO Thisform.object.ListCount
	Thisform.object.SelectedID(nCnt)=.F.
ENDFOR


если следующей строкой идет очистка
Код: sql
1.
Thisform.object.clear


если только у вас не запрограммирован метод ProgrammaticChange() листбокса.
Тут пропущено несколько строк кода, сути дела это не меняет, не хотел никого грузить лишней инфой
Я так понимаю, что при щелчке по листбоксу указатель прыгает на ПЕРВУЮ ЗАПИСЬ В ЛИСТБОКСЕ?
Скажу больше:
- если сначала делать выбор из списка (2., который работает), то начинает работать и 1.
- если сначала 1., то .......
- на какую строку первой кликнешь, на ту потом и перескакивает
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37770844
Гость555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540,
Всетаки хотелось бы знать, какие методы листбокса заполнены? можеш сделать тестовую форму с похожим поведением листбокса? мне не удалось.
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37770940
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость555Всетаки хотелось бы знать, какие методы листбокса заполнены?
MouseDown, MouseUp, Click
можеш сделать тестовую форму с похожим поведением листбокса? мне не удалось.Боюсь, что подобную х.... сделать у меня не получится. Это доработка старой проги, потребовалось
добавить на форму несколько объектов, ну и код прописать...
Блин, проще новую сделать :(
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37771113
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос вдогонку: существует ли ограничение на количество объектов в форме?
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37771316
Гость555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540
MouseDown, MouseUp, Click

надо смотреть эти методы
Вопрос вдогонку: существует ли ограничение на количество объектов в форме?

может и существует, но не думаю, что тебе столько понадобится, берем форму, кидаем на нее кнопку, в кнопку код:
Код: sql
1.
2.
3.
4.
FOR i=1 TO 65000
	WAIT WINDOW i nowait
	thisform.AddObject('t'+ALLTRIM(STR(i)),'textbox')
endfor


запускаем форму, жмем кнопку, ждем n минут, у меня на 63938 фокса зависла, может это и есть ограничение, не знаю.
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #37772725
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость555MouseDown, MouseUp, Click
надо смотреть эти методы

Оказывается, не надо. Надо было (как ни странно) смотреть метод Load() самой формы
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выбор строки в ListBox
    #39675278
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я столкнулся с подобной ситуацией (в VFP9) по другой причине: ListBox начинает упорно отрицать выбор строки, если ему назначить переменную в его свойстве ControlSource.
Логически я это понимаю - ведь эта переменная у меня изначально не имеет конкретного значения (пробовал и его присваивать, в методе Form.Load), поэтому начальный выбор и получается таким неопределённым. Но всё равно - я же должен иметь возможность изменить этот выбор, щёлкнув мышкой по другой строчке ListBox'а? По крайней мере, ComboBox такую возможность предоставляет, а у ListBox'а выходит, что хвост управляет лошадью :(
Без переменной можно было бы и обойтись, обращаясь напрямую к ListBox.Value, но конкретный вопрос в другом: а как тогда вернуть это выбранное значение из формы? Ведь возврат осуществляется в методе/событии формы Unload, а к моменту его выполнения, насколько я понимаю, ListBox уже не существует и, следовательно к ListBox.Value обратиться уже не получится?
Конечно, можно было бы писать выбранное значение в возвращаемую переменную не напрямую через ListBox.ControlSource, а в методе ListBox.LostFocus, но как-то уж это похоже на костыли.
К слову сказать, даже в такой ситуации, когда ControlSource блокирует визуальный выбор произвольной строки ListBox'а, щелчок мышкой по выбранной строке всё-таки записывает выбор в переменную, возвращаемую формой. Только хотелось бы, чтобы этот выбор визуально сохранялся в самом ListBox'е - для наглядности.
Может, кто знает, как это сделать, не отказываясь от использования ControlSource?
И ведь как-то раньше лет 12 назад я это как-то делал, вроде... Забыл :(
Образец формы с dbf-ником прилагаю в архиве. Если очистить свойство ListBox.ControlSource - то ListBox начинает работать как нужно (разрешает визуальный выбор мышкой). А мне надо заставить его точно так же работать и при установленном свойстве ControlSource.
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #39680627
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznajka,

Замени источник данных. Вместо списка полей используй запрос. Примерно так

Код: sql
1.
2.
RowSource = "select nam,id from q2_slovar_osoba into cursor test"
RowSourceType = 3 - SQL Statement



Если запрос будешь писать в окне свойств, то кавычки не нужны. Ну, и в Unload формы не забудь закрыть уже не нужный курсор test.

Как вариант, можно в качестве источника данных использовать массив (into array). Но тут программировать надо чуть больше

При работе с объектом List крайне не желательно в качестве источника данных использовать прямое обращение к полям или файлам. Последствия не предсказуемые. Это режимы, скорее, для обратной совместимости

В данном конкретном случае не понятно, почему не был использован обычный Grid. Выбранное значение просто берется из текущей записи. А как эта запись стала текущей (мышкой или клавишами) - уже не важно.
...
Рейтинг: 0 / 0
Выбор строки в ListBox
    #39680788
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, ВладимирМ!
Вы, как всегда правы - я раскопал свои давние программы на VFP6-7 и там я действительно использовал выводы в массивы. С огорчением увидел, что сейчас уже не понимаю некоторые тогдашние свои программерские построения - но как-то же оно всё-таки прекрасно работало в своё время :)
А насчёт того, почему в примере использован не Grid, а ListBox - так мне-то надо было как-то показать мои проблемы именно с ListBox'ом :)
В общем, проблема решена. Очень признателен за участие и толковый совет.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбор строки в ListBox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]