Как узнать состояние радиокнопки на листе? Помогите начинающему

Автор dndn, 7 мая 2014, 17:12

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

dndn

Для выбора режима работы с листом создал группу с радиокнопками.
Прописываю код:
  oForms = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms
  vForm=oForms.getByName("Форма")
  vButton = vForm.getByName("Группа 1")

А дальше - ступор...  >:(

JohnSUN

В свойствах каждой из кнопок, во вкладке Данные, можно задать адрес связанной ячейки и значение индекса для состояния "Включен".
Назначь каждой из радиокнопок уникальное значение (хоть 1-2-3, хоть Правка-Расчет-Просмотр - тексты в качестве значения допустимы) и одну и ту же связанную ячейку.
И в макросе анализируй значение из этой вот ячейки.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

dndn

Получилось! А связанную ячейку, чтоб не портила картину, спрятал под радиокнопками.
Спасибо!   :beer:

dndn

А одиночный переключатель никак не сделать? Чтоб по одной единственной кнопке по клику включался и отключался. Пробую - только включается...

Тьху ты, для этого же флажок есть  ;D

dndn

Вопрос тот же, только теперь не в Calc, а в диалоге.
  DialogLibraries.LoadLibrary( "Standard" )
  oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
  oCheckBox1 = oDialog1.getControl ("CheckBox1")
  state = oCheckBox1.getState()

И при установленном и при снятом флажке возвращает одно и то же значение - то, что установлено по умолчанию.
Что не так?

rami

ЦитироватьИ при установленном и при снятом флажке возвращает одно и то же значение - то, что установлено по умолчанию.
Что не так?
Все так и должно быть. Чтобы получить изменившееся значение нужно назначить флажку событие "Состояние изменено". Смотрите пример.

dndn

Странно, но Ваш пример абсолютно рабочий, а мой совершенно наоборот... :(

Диалог предназначен для добавления/изменения записей в БД. Перед вызовом в список загружаются уже имещиеся записи.
Стандартно необходимо только добавление данных. В текстовое поле вводится значение для новой записи, по кнопке "Добавить" значение поля добавляется в список и в таблицу БД.

Удаление значений может понадобиться только в отдельных, исключительных случаях, т.к. приведет к неизбежному каскадному удалению большого количества записей в других связанных таблицах. Поэтому решил такую возможность все-таки предусмотреть, но сделать ее изначально недоступной, а доступность кнопки удаления включать этим самым флажком.

Странно, что не срабатывает также включение доступности кнопки удаления:

 oCommandButton2.setEnable (True)

Т.е. код как бы выполняется, но действия не происходит, так же как и с флажком, кнопка остается недоступной.

Еще что заметил. В диалоге добавил кнопку "Закрыть диалог". По ней диалог нормально закрывается до тех пор, пока хотя бы один раз не изменил состояние флажка. После этого диалог не закрывается, только по нажатию на крестик закрытия.  :(

Перегруз не помог. Ща попробую удалить этот злополучный флажок и на его место поставить новый...

ЗЫ. Использую AOO 4.1. Система Windows 7
За ответ с примером огромнейшая благодарность

rami

Вы можете выложить документ? Если он "секретный" ,сделайте дубликат, вставьте новый чистый лист и удалите "секретные" листы. Я хочу посмотреть на макросы

dndn

Спасибо за содействие! В коде обработчика флажка заново создавал объект диалога,
DialogLibraries.LoadLibrary("Standard")
oDialog1=CreateUnoDialog(DialogLibraries.Standard.Dialog1)
в итоге с каждым нажатием создавался новый объект...  ;D
Поэтому и кнопка "Закрыть" переставала работать...

Еще хотел сделать дополнительный сервис. При массовом групповом добавлении записей, чтобы в список добавлялись данные текстового поля по нажатию "Enter", а не по кнопке "Добавить". Вопрос был в этой теме:
http://forumooo.ru/index.php?topic=4287.msg26142#new

rami

Для клавиши "Enter" нужно создавать отдельный обработчик события. Тоже самое можно сделать проще через клавишу "Tab". Введите слово в текстовое поле (в правом верхнем углу) и нажмите "Tab" , слово добавится в список. Это всего лишь пример добавления в список из текстового поля.

dndn

Точно, как же я не догадался повесить добавления элемента списка на событие потери фокуса текстового поля?  :-\

Я сделал кнопку "Добавить", а порядок перехода по элементам управления сделал так, чтоб после текстового поля шла кнопка, а по событию кнопки добавлял в список. Получалось, что без мыши надо было нажать сначала "Tab", затем "Enter".
Нужно было всего-навсего событие потери фокуса текстового поля направить на тот же обработчик, что и по кнопке  ;D
Спасибо. Жаль, что здесь нет опции "Благодарность за пост". Разве что вот так:  :beer: