Страницы: 1
RSS
Как узнать из формы: модальный или не модальный режим?
 
Делаю юзер-форму.    
Форма может быть открыта из программы как в нормальном (модальном) режиме командой    
UserForm1.Show  
так и в немодальном режиме командой  
UserForm1.Show  vbModeless  
 
В зависимости от того, в модальном или немодальном режиме открыта форма, необходимо изменять в ней алгоритм обработки событий.  
Не могу, работая в программе формы считать, в каком режиме она открыта...  
Через глобальные переменные передавать параметры, конечно, можно, но не хотелось бы.  
Может, кто-нибудь что-то посоветует?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
У формы в свойствах есть ShowModal, но почему-то не выходит к нему обратиться программно.  
Но у Вас же ответ перед глазами:  
  If Me.CheckBox1 Then  
     UserForm1.Caption = "Открыто в модальном режиме"  
     UserForm1.Show  
  Else  
     UserForm1.Caption = "Открыто в не модальном режиме"  
     UserForm1.Show vbModeless  
  End If  
А именно строки UserForm1.Caption = "Открыто в...  
Пишете в любую переменную состояние модальности, потом проверяете.  
Или создаете на форме невидимый label или чек-бокс (или все что душе угодно), в который также пишете состояние модальности перед запуском.
Bite my shiny metal ass!      
 
Кнопочка красивая...
 
Лузер™, про свойство ShowModal я что-то не слышал... Но раз оно не работает, то и Бог с ним... Но завтра на работе всё равно его попытаю на всякий случай (а вдруг у меня получится?)  
По поводу передачи значений в форму путем задания значения параметров какого-нибудь не используемого её элемента перед её вызовом я уже думал по дороге домой уже после того, как создал этот топик... Можно, конечно, но как-то коряво. Слишком много лишних "телодвижений" (т.е. "кододвижений" :-)). Хотя это ИМХО всё равно "цивильнее", чем через глобальные переменные. Конечно, удобнее всего было бы передавать параметры юзер-форме также как подпрограмме или функции. Но на нет и суда нет.  
Завтра на работе посмотрю, как я когда-то передавал аргументы формам в Access'e. Там, вроде, как-то получалось. Хотя там были не юзер-формы... Если найду исходники той базы данных, то попробую по аналогии сделать в Ёкселе.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
VovaK, таких и даже более интересных кнопочек Офис сам вам нароет кучу, стоит только спросить для него понятно
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=20.01.2010 09:36}{thema=}{post}Лузер™, про свойство ShowModal я что-то не слышал{/post}{/quote}  
Алекс, а это что? :-)
 
Да, это действительно похоже на свойство "Модальный/Не модальный", задаваемое форме...  
А вот тоже ли это самое свойство, что задаётся при вызове формы с суффиксом vbModeless ?  
Скорее всего - НЕТ. Поэтому и не считывается, как утверждал Лузер™  
Надо поковыряться.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Я как раз про него и писал. Оно есть, а обратиться никак. Видимо, чтобы только при запуске его устанавливать, но не менять в процессе. И при этом не делать его ридонли.
Bite my shiny metal ass!      
 
Да... Побился я со свойством ShowModal и понял, что оно действительно никак не доступно для программного изменения и даже для считывания. При конструировании формы его можно установить False или True и это будет влиять на метод вызова формы "ПО УМОЛЧАНИЮ".  
А вот программно установить или считать это "умолчание" - фиг вам!  
Но зато, раз программно это свойство недоступно, я вышел из положения так (может, кому-нибудь пригодится в будущем):  
- при конструировании в форме создал элемент управления CheckBox и присвоил ему имя ShowModal (раз свойство с таким именем программно недоступно, то имею полное право это имя использовать)  
- сделал элемент ShowModal НЕВИДИМЫМ (Visible = False)  
- поместил элемент ShowModal в любое место формы (всё равно его никому не будет видно)  
Теперь в форме имеется элемент управления с именем ShowModal, к которому, естественно, можно обращаться точно так же, как к свойству:  
- из листа: UserForm1.ShowModal = True    
- из самой формы: Me.ShowModal = True  
Этот элемент сам по себе, конечно, ни на что не влияет, но зато полностью доступен программе.  
Единственное неудобство такого решения это то, что вызывать форму теперь приходится не одной командой, а двумя:  
модальный вызов:      
UserForm1.ShowModal = True  
UserForm1.Show vbModal (или можно просто UserForm1.Show)  
не модальный вызов:      
UserForm1.ShowModal = False  
UserForm1.Show vbModeless  
 
 
Да, ещё как и обещал, проверил на старой базе данных, как передавал аргументы форме в Access'e.    
В Ёкселе это не прокатит, т.к. в нём у формы нет метода OpenForm и его аргумента OpenArgs    
(MS Access: OpenArgs property determines the string expression specified by the OpenArgs argument of the OpenForm method that opened a form. Read/write Variant)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх