powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова listbox, множественный выбор
15 сообщений из 15, страница 1 из 1
Снова listbox, множественный выбор
    #35656167
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, из неё выводятся данные в listbox. Как сделать возможность множественного выбора из него и передачи выбранного в другую таблицу. Поиском пользовался, мб плохо, но не нашёл ничего более менее....В хелпе есть пример множественного выбора, но как им пользоваться не понял...Кстати может есть способ другой для решения этой проблемы....
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656182
FFFFFFFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите хотя бы в Solutions-Listbox "Multiselect items in a Listbox"
в стандартной поставке FoxPro.
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656234
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбираюсь
Вот код, с помощью которого отыскиваем помеченные записи
Код: plaintext
1.
2.
3.
4.
5.
6.
FOR nCnt =  1  TO ThisForm.List1.ListCount
      IF ThisForm.List1.Selected(nCnt)
         ThisForm.List1.List(nCnt)
         /*по сути здесь надо записать выделенную запись в массив или курсор, чтобы потом записать в другую таблицу, как это сделать я не знаю*/
      ENDIF
ENDFOR 
Как быть?
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656302
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай, ThisForm.List1.List - в общем случае двумерный массив (если listbox настроен на отображение 2-х или больше колонок). Второй индекс - номер колонки.

Всё упирается, я так понимаю, в незнание синтаксиса.

Через массив :

LOCAL i, lnSelCount
lnSelCount = 0
FOR i = 1 TO ThisForm.List1.ListCount
IF ThisForm.List1.Selected (i) THEN
lnSelCount = lnSelCount + 1
ENDIF
NEXT

IF lnSelCount = 0 THEN
MessageBox ('Ничё ж не выбрано!', 48, 'Внимание!')
RETURN
ENDIF

LOCAL ARRAY lvaArray1 (lnSelCount)
&& или PUBLIC ARRAY lvaArray1 (lnSelCount)

LOCAL i2
i2 = 0
FOR i = 1 TO ThisForm.List1.ListCount
IF ThisForm.List1.Selected (i) THEN
i2 = i2 + 1
lvaArray1 [i2] = ThisForm.List1.List (i)
ENDIF
NEXT

Через курсор

CREATE CURSOR crCursor1 (Field1 N (5))
&& Разумеется, тип поля (полей) должен соответствовать Вашему контексту.

В цикле:

INSERT INTO crCursor1 (Field1) VALUES (ThisForm.List1.List (i))
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656303
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Физически, то, что отображено в ListBox это уже не сами записи таблицы, а некоторый особый массив символьных (и только символьных !) данных.

Обратится напрямую к этому массиву можно через специфическое свойство List. Как и показано в примере.

Код: plaintext
ThisForm.List1.List(nCnt)

Этот массив может быть как одномерным, так и двумерным. Соответственно, номер строки этого массива совпадает с индексом элемента ListBox, а номер столбца, с номером столбца ListBox.

Возвращаясь к примеру, он предполагает, что вы прочитали значение из первого столбца и строки с номером nCnt. И это значение имеет символьный и только символьный тип данных.

Как следствие, получить список значений очень просто

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create cursor curSelected (selValue C( 10 ))
FOR nCnt =  1  TO ThisForm.List1.ListCount
      IF ThisForm.List1.Selected(nCnt)
         INSERT INTO curSelected (selValues) VALUES (ThisForm.List1.List(nCnt))
      ENDIF
ENDFOR 

* Просмотр выбранных значений
select curSelected
browse nowait

Разумеется, здесь я предполагаю, что в качестве значения вам надо записать содержимое первого столбца выбранной строки.

Как ещё один вариант организации множественного выбора можно использовать Grid с дополнительным столбцом с объектами CheckBox.
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656437
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более менее стало понятно, спасибо.
Тогда ещё вопрос, предположим запоминаю выборку в массив и по кнопке добавиь из формы добавляю данные в другую таблицу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
local i, lcValue
lcValue = ''
with Thisform.List1
     for i =  1  to .ListCount
          if .Selected(m.lnIndex)
              lcValue = m.lcValue + .List(m.lnIndex)
          endif
     endfor   
ENDWITH
replace mytable.k with m.lcValue
Теперь интересно, как прочитать значения из поля таблицы снова в listbox, т.е. чтобы выделились именно те, которые прежде были выбраны и сохранены
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656440
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более менее стало понятно, спасибо.
Тогда ещё вопрос, предположим запоминаю выборку в массив и по кнопке добавиь из формы добавляю данные в другую таблицу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
local i, lcValue
lcValue = ''
with Thisform.List1
     for i =  1  to .ListCount
          if .Selected(m.i)
              lcValue = m.lcValue + .List(m.i)
          endif
     endfor   
ENDWITH
replace mytable.k with m.lcValue
Теперь интересно, как прочитать значения из поля таблицы снова в listbox, т.е. чтобы выделились именно те, которые прежде были выбраны и сохранены
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656453
homik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote] Теперь интересно, как прочитать значения из поля таблицы снова в listbox, т.е. чтобы выделились именно те, которые прежде были выбраны и сохранены [/quote]
Здесь надо задатся вопросом: это необходимо в данной сессии или Вы в принципе хотите запомнить те элементы, которые выбраны в последней сессии.
А первом случае достаточно не удалять массив, в котором записаны выбранные элементы.
Во втором случае придется :
- или ставить флаг (скажем дополнительное поле типа L)
- или запоминать дату и время добавления (поле типа DateTime)
- или создавать дополнительную таблицу, в которой хранить элементы, добавленные последними.
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35656520
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице Mytable в одном из полей хранятся те элементы, которые были выбраны, вот как сделать их чтение и в соответствие вернуть выделенные элементы в listbox?
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35662037
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот заинтересовал ещё один вопрос. Пытаюсь програмно выделить несколько записей в листбоксе, если значения в него просто добавлены всё хорошо - работает, а если из таблицы, то не работает......
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35663561
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
densitВот заинтересовал ещё один вопрос. Пытаюсь програмно выделить несколько записей в листбоксе, если значения в него просто добавлены всё хорошо - работает, а если из таблицы, то не работает......

Код: plaintext
ListBox.MultiSelect = .T.

Вы бы хотя бы пример из Help изучили. Что там и как делается.
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35663972
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМdensitВот заинтересовал ещё один вопрос. Пытаюсь програмно выделить несколько записей в листбоксе, если значения в него просто добавлены всё хорошо - работает, а если из таблицы, то не работает......

Код: plaintext
ListBox.MultiSelect = .T.

Вы бы хотя бы пример из Help изучили. Что там и как делается.
Да внимательно вроде читал, вот если массив добавляю в листбокс работает, а если из таблицы не получается выделение, вот пример
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35664365
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена, по ходу глюк vfp....решение здесь http://support.microsoft.com/kb/q134245/
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35664374
densit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена, по ходу глюк vfp....решение здесь http://support.microsoft.com/kb/q134245/
...
Рейтинг: 0 / 0
Снова listbox, множественный выбор
    #35666092
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
densitПроблема решена, по ходу глюк vfp....решение здесь http://support.microsoft.com/kb/q134245/
Какое отношение глюк от VFP3 (уже пофиксен в VFP5) имеет к данному вопросу? Или у вас именно VFP3?

Запустил ваш пример. Все нормально выбирается. VFP9
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова listbox, множественный выбор
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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