[РЕШЕНО]Список. Возврат к начальному состоянию.

Автор Ириминаге, 13 мая 2022, 08:22

0 Пользователи и 1 гость просматривают эту тему.

Ириминаге

Здравствуйте! Мне удалось написать довольно неплохую БД, но вот один вопрос разрешить пока не смог:
Есть элемент Формы "Список", в который забиты какие-то данные. Так же на форме есть поля для заполнения. После ввода всех значений и подтверждения нажатием кнопки, все поля очищаются, а список, по моему замыслу, тоже должен показать пустое значение, как при запуске Формы. Пока что найти способ это сделать мне не удалось. Может вы подскажете, как это осуществить?
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

sokol92

За содержимое ListBox отвечает свойство StringItemList его модели.
Пример (для диалога Dialog1, содержащего элемент управления ListBox1):
Sub TestListBox
  Dim oDialog, oListbox
  oDialog=CreateUnoDialog(DialogLibraries.GetByName("Standard").GetByName("Dialog1"))
  oListBox=oDialog.getControl("ListBox1")
  oListBox.Model.StringItemList=Array("1", "2")
  oDialog.Execute    ' две строки
 
  oListBox.Model.StringItemList=Array()
  oDialog.Execute    ' нет строк
End Sub
Владимир.

Ириминаге

Спасибо за ответ! Если я правильно понял, второй раз передается пустой массив? Это не то, что мне нужно.. Список на Форме имеет данные через SQL-запрос на уровне самой Формы. Все поля ввода после подтверждения очищаются для удобства, плюс при подтверждении делается проверка на заполненность полей. Списки, по моему замыслу, должны вернуться к начальному состоянию: данные в них есть, однако ни один элемент не выбран. На одной из последних форм, это даже сработало через Form.reload(), а вот на предыдущих что-то не хочет. И я пока не понимаю почему.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

sokol92

#3
Цитата: Ириминаге от 13 мая 2022, 08:22список, по моему замыслу, тоже должен показать пустое значение
Эту фразу можно интерпретировать по разному.  :)

Sub TestListBox2
 Dim oDialog, oListbox, i
 oDialog=CreateUnoDialog(DialogLibraries.GetByName("Standard").GetByName("Dialog1"))
 oListBox=oDialog.getControl("ListBox1")
 With oListBox.Model
   .StringItemList=Array("1", "2", "3")
   .MultiSelection=True
 End With    
 oDialog.SetTitle "Выделите строку (строки)"
 oDialog.Execute    
 
 ' Сбрасываем отмеченные строки
 With oListBox  
   For Each i In .getSelectedItemsPos()
       .selectItemPos i, False
   Next i
 End With  
 oDialog.SetTitle "Нет выделенных строк?"
 oDialog.Execute    
End Sub
Владимир.

Ириминаге

Вспоминая Коклюшкина: "Не хочу чтоб меня поняли правильно...."

Спасибо! Похоже, это то, что надо! Буду экспериментировать!
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

Ириминаге

Увы, метод SelectItemPos нельзя использовать для листбокса. Натужное курение интернета дало мне мысль поставить XRAY, через него я нашел метод reset. Он отлично справился с задачей.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

sokol92

Цитата: Ириминаге от 24 мая 2022, 16:07Увы, метод SelectItemPos нельзя использовать для листбокса.
Поясните, пожалуйста, свой тезис.
Во вложении документ Calc с макросом из ответа #3. У Вас этот макрос работает некорректно?
Владимир.

Ириминаге

Система ругается на метод SelectItemPos. В XRAY этого метода нет в свойствах "поля со списком". И да, у меня Base. В Calc может быть всё иначе. Конкретно ваш пример не делает ничего, хоть макросы из него разрешил.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

sokol92

#8
При первом вызове диалога отмечаете строку или строки, при втором вызове диалога не должно быть ранее отмеченных Вами строк.

Возможно я отстал от жизни, но "поле со списком" называлось ранее Combobox, а не Listbox.
Владимир.

Ириминаге

В том-то и дело, что диалогового окна не появляется, хотя в древе объектов он есть.

ComboBox потому так и назывался, что комбинировал листаемый список с выпадением оного. И так было лет -цать назад, когда я учился на программиста. А listbox только листал. И только тут, в OO и LO он научился выпадаться, и стал более привлекательным за счёт невозможности прямого редактирования списка.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...