powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать открыто меню или нет ?
24 сообщений из 24, страница 1 из 1
Как узнать открыто меню или нет ?
    #32647828
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем делаю себе динамическое меню ... но хотелосб бы узнать, как проверять открыто оно или нет ... и если да то удалять ...
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32647866
Galustov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В каком смысле "открыто или нет"? Меню какого типа: как стандартное вверху или контекстное?
по-подробнее опиши
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32647966
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 ' проверка на существование указанного меню 
Public Function IsExistCB(Optional cbname As String) As Boolean
Const ERR_CMDBAR_EXISTS   As Long =  5 
Dim strname As String
On Error GoTo MyError
strname = CommandBars(cbname).Name
MyError:
If err = ERR_CMDBAR_EXISTS Then
    IsExistCB = False
ElseIf err <>  0  Then
    IsExistCB = False
    MSGBOX "Ошибка: " & err.Number & err.Description, vbCritical, "Внимание!"
Else
    IsExistCB = True
End If
End Function
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32647986
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не грубовато ли это - поминать имя ... сорри, "дергать" Error?

У меня для таких дел прикопана специальная функция-утилитка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function Seek_Name_in_Collection(c, Name As String) As Object
     Dim x As Object
For Each x In c
      If x.Name = Name Then
        Set Seek_Name_in_Collection = x
        GoTo End_SFP
    End If
Next
Set Seek_Name_in_Collection = Nothing
End_SFP: End Function
- понятно дело, если имена элементов колекции "называются" почем-то не ".Name", - она не поможет ...
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648000
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробнее

У меня открываются разные - верхние меню (сделаные мною программно) - в зависимости от того, какой пользователь вошел в систему.

Вот и хочу сделать так, что при смене юзера (это дело у меня уже сделано), я программа удаляла все меню сделанные предыдущим и строила новое в зависимости от прав юзера ...
Спасибо
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648003
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так имена известны? - Какие проблемы удалять.

2 Иван FXS
Уважаемый - перебор элементов по коллекции не есть быстрое решение:) Слышали про конструкцию try catch что-нибудь?:)
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648008
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через Error я сделал ... но как-то грубовато получается

вот такую функцию ...типа

if Менюшка1.isLoaded then ....

Или я много хочу )
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648016
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ёбтыть - если не нравится быстрый способ НОРМАЛЬНОЙ проверки объекта на существование - переберайте всю коллекцию.

Что значит менюшка загружена????
Это объект Access - такой же, как и таблицы к примеру.
Можно его сделать темповым - тогда при выходе он будет удалён. Вы же не говорите - таблица загружена - говорите - существует.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648159
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HummerСлышали про конструкцию try catch что-нибудь?:)
- слышал ... кажется ... только ... не в Аццессе и не в VBA :-(
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648167
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummerперебор элементов по коллекции не есть быстрое решение:) - а почему, кстати оно "не быстрое"? Их что, надо куда-то при этом загружать (куда они итак уже не загружены) ... чтобы у каждого проверить СВОЙСТВО (.Name)??
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648171
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Иван FXS
Ну и что? Генерация определённой ошибки в Аксесе и её отлов - есть не что иное, как эта же самая конструкция. Почему это грубое решение?

Ну раз не нарвится, давайте медленно так ползать по коллекциям.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32648179
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Иван FXS
Поймите, вы организуете цикл скажем по 100 элементам и только у 99-го это свойство совпадёт - это что, быстро?
Я просто генерю ошибку и её отлавливаю - поймал - нет объекта, нет ошибки есть объект - побыстрее будет, не так ли?:)
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32649610
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть команда VBA, которая закрывает все открытые меню ?
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32649851
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer2 Иван FXS
Поймите, вы организуете цикл скажем по 100 элементам и только у 99-го это свойство совпадёт - это что, быстро?
Я просто генерю ошибку ...
- очлюбопытно ... а СИСТЕМА - чтобы обнаружить, что Вы "сгенерили ошибку" - разве не будет "организовывать цикл скажем по 100 элементам"?

И вообще ... быстрота, говорят, нужна только при ловле блох ...

Ваша конструкция НЕКРАСИВА, поскольку использует on error НЕ ПО НАЗНАЧЕНИЮ!
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32649856
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Иван FXSВаша конструкция НЕКРАСИВА, поскольку использует on error НЕ ПО НАЗНАЧЕНИЮ!
Ну и что, что не по назначению? Есть множество решений разных задач, которые можно признать красивыми и элегантными именно потому, что они используют что-нибудь не по назначению.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650017
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Иван FXS
Это почему не по назначению-то?:)
А какое у неё назначение?:)

Книжки умные почитайте, прежде чем что-то кому-то доказывать:)
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650081
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO вы забыли про того, кто задал вопрос.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650103
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВаша конструкция НЕКРАСИВА, поскольку использует on error НЕ ПО НАЗНАЧЕНИЮ!

а мне понравился вариант "дергать за ошибку"

проверяешь только то что нада.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650119
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nukriУ меня открываются разные - верхние меню (сделаные мною программно) - в зависимости от того, какой пользователь вошел в систему.

Вот и хочу сделать так, что при смене юзера (это дело у меня уже сделано), я программа удаляла все меню сделанные предыдущим и строила новое в зависимости от прав юзера ...
А меню всегда строятся автоматически? Или юзер имеет возможность своими действиями строить меню по своему желанию? Если первое, то я бы строил все меню сам (на этапе создания mdb), а юзер при входе получал бы часть меню в невидимом виде в зависимости от его прав.

Нехорошо это - создавать объекты в файле во время работы программы... Во-первых, файл растет. Во-вторых, мультиюзерство не получится. Во-вторых, на mde не перейти.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650129
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем на каждую смену юзера я делаю

Sub УдалитьВсеПанели()
Dim bar As Object
For Each bar In CommandBars
If (bar.BuiltIn = False) And (bar.Visible = True) Then
bar.Delete
End If
Next bar
End Sub

А потом открываю ему все, что нужно ....
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650135
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
Динамичекси созданное меню незначительно увеличивает размер фалй и распрекрасно работает в мде/аде.
Например, есть несколько ролей по функциональным группам пользователей в зависимости от должностей или положения в организации - описываем для каждого главное меню программы (в табличках) и строим табличку соответсвия ролей и меню. Всё, при входе идентифицируем пользователя и выдаём меню его группы.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650136
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer2 Владимир Саныч
Динамичекси созданное меню незначительно увеличивает размер фалй и распрекрасно работает в мде/аде.
Например, есть несколько ролей по функциональным группам пользователей в зависимости от должностей или положения в организации - описываем для каждого главное меню программы (в табличках) и строим табличку соответсвия ролей и меню. Всё, при входе идентифицируем пользователя и выдаём меню его группы.


Именно так я и делал.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650139
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 nukri
Ну и в чём проблема с удалением-то?
Зачем при каждой смене юзера удалть?:) Вы просто для КАЖДОГО юзера запускайте своего клиента.
...
Рейтинг: 0 / 0
Как узнать открыто меню или нет ?
    #32650146
nukri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer2 nukri
Ну и в чём проблема с удалением-то?
Зачем при каждой смене юзера удалть?:) Вы просто для КАЖДОГО юзера запускайте своего клиента.

Дело в том, что сидя за машиной один диспетчер может сменить другого ... и ему незачем запускать своего клиента ... просто нужно сменить ему панель ...
А самый простой способ не думать долго какие панели были запущены предыдущим клиентом - просто удалить все и построить все заново ...

можете быть ... это и "тупо в лоб" но следить за каждым открытым меню дольше ...

ИМХО

В любом случае Всем спасибо за советы!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать открыто меню или нет ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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