Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

1 Декабрь 2020, 09:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как обработать событие Закрытие диалога  (Прочитано 429 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Стартовое сообщение: 4 Ноябрь 2020, 18:41 »

Добрый вечер!
Создаю диалог.
Как я понимаю, в форме диалога всегда будет крестик в правом верхнем углу.
Можно ли как-то убрать этот крестик?
Где я должен указать макрос, выполняемый при нажатии на этот крестик?
События "Закрытие формы" для формы я не нашел.
Спасибо.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 229


WWW
« Ответ #1: 4 Ноябрь 2020, 19:18 »

Здравствуйте!
У А.Питоньяка в книге OOME_4_0.odt (раздел 18.1.2) написано, что метод Execute() возвращает число 1, если нажата кнопка "ОК" и 0, если нажата "Cancel" или пользователь закрыл форму "крестиком".
Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Ответ #2: 4 Ноябрь 2020, 19:25 »

Спасибо. Теперь все понятно. Жаль только, что нельзя отказаться от крестика.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 229


WWW
« Ответ #3: 4 Ноябрь 2020, 19:40 »

В Excel (тоже?) нет "штатного" метода для показа формы без крестика. "Обходной" путь достаточно сложен и не может быть перенесен на операционные системы, отличные от Windows.

Если на форме кнопки "Cancel" нет и нежелательно закрытие формы нажатием на "крестик", то можно проанализировать код возврата Execute и в случае ноля (выдать предупреждение и) вновь показать форму.

Кроме нажатия на "крестик" форму можно также закрыть и с помощью Alt+F4 (по крайней мере в Windows и Ubuntu).
« Последнее редактирование: 4 Ноябрь 2020, 19:55 от sokol92 » Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Ответ #4: 5 Ноябрь 2020, 13:55 »

Все равно не понятно.
Поменял имя кнопки на OK.
Оставил обработчик события Выполнить действие.
Если его нет, после нажатия на кнопку остаюсь на операторе Execute().
Оператор Execute() возвращает 0.
Записан
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Ответ #5: 5 Ноябрь 2020, 15:03 »

Я решил эту проблему, не используя возвращаемое значение метода Execute().
Я определил глобальную переменную Dim bContinue.
Перед вызовом метода Execute() я присваиваю ей значение false.
В обработчике события нажатия на кнопку OK присваиваю этой переменной значение true.
В обработчике события нажатия на кнопку Cancel присваиваю этой переменной значение false.
После оператора Execute() проверяю значение этой переменной.
Если оно равно true, значит пользователь нажал на кнопку OK. Если false - на крестик или на кнопку Сancel.
Вроде все работает.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 229


WWW
« Ответ #6: 5 Ноябрь 2020, 15:35 »

Оператор Execute() возвращает 0.
А.Питоньяк в диалоге HelloDlg не присвоил для кнопки свойство "Тип кнопки", равное "OK".
Если это сделать, то при нажатии на кнопку метод Execute будет возвращать 1.

Метод, с помощью которого Вы решили проблему, тоже вполне работоспособен (и нередко используется). В MS Office обычной практикой для обмена информацией между макросами модуля Userform и стандартных модулей является использования свойства Tag формы.
« Последнее редактирование: 5 Ноябрь 2020, 15:40 от sokol92 » Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Ответ #7: 5 Ноябрь 2020, 16:12 »

Не заметил, что у кнопки есть свойство Тип кнопки. Если использовать это свойство, обработчик события не нужен.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!