Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обращение к элементам меню через массив.

1.8K
10 февраля 2008 года
NextTime
217 / / 19.12.2007
У меня есть 2 элемента меню, созданные через "редактор меню". У меня многоязычная программа, и после запуска надписи на элементах меню меняются в соответствии с выбранным языком. Примерно так: mnuFile.Caption="значение, прочитанное из файла соответствующего языка", но если элементов много, то будет слишком большой код. Может существует какой-нибудь стандартный массив, в котором содержатся эти элементы меню, и к элементам можно было бы обращаться через этот массив? То есть примерно так: ArrayOfMenu(1) соответствует элементу mnuFile. Существует ли такой массив, и как он называется?
275
11 февраля 2008 года
pashulka
985 / / 19.09.2004
Решить поставленную задачу можно следующим образом : при создании меню, Вы в диалоговом меню Menu Editor присваиваете всем меню одно имя (Name), например menuFile, но различные индексы (Index) желательно начиная с 0, т.е. 0, 1, 2 и т.д., а затем, используете любой из трёх нижеопубликованных примеров :

 
Код:
Private Sub Form_Load()
    'Здесь нумерация может быть любой
    Dim iMenu As Menu
    For Each iMenu In Me.menuFile
        iMenu.Caption = "..."
    Next
End Sub


 
Код:
Private Sub Form_Load()
    'Нумерация обязательно должна начинаться с 0
    'и представлять собой арифметическую прогрессию с шагом 1
    Dim iCount As Integer
    For iCount = 0 To Me.menuFile.Count - 1
        Me.menuFile(iCount).Caption = "..."
    Next
End Sub


 
Код:
Private Sub Form_Load()
    'Нумерация не обязательно должна начинаться с 0
    'но исполнение второго условия обязательно
    With Me.menuFile
         Dim iCount%
         For iCount% = .LBound To .UBound
             .Item(iCount%).Caption = "..."
         Next
    End With
End Sub
1.8K
11 февраля 2008 года
NextTime
217 / / 19.12.2007
Спасибо!До вашего ответа я спросил в асе и мне сказали то же, что у вас в первом варианте. Думаю он самый быстрый и удобный.Его и использовал, пока не узнал, что массив Controls содержит все элементы управления формы, поэтому сейчас действую так:
сначало заношу в свойство Tag всем элементам меню "mnu", а затем код:
 
Код:
For Each h In Me.Controls
If h.Tag="mnu" Then h.Caption="..."
Next

Теперь еще один вопрос, можно не заносить информацию в Tag, распознавать, является ли это элементом меню по какому-нибудь свойству, типа:
 
Код:
For Each h In Me.Controls
If h.Type="menu" Then h.Caption="..."
Next

можно как нибудь так?Существует как бы ли такое свойство, которое указывает на тип объекта, то бишь там Label, ListBox, Command?
275
11 февраля 2008 года
pashulka
985 / / 19.09.2004
Не буду спрашивать у Вас, зачем необходимо перебирать все элементы управления, если можно работать непосредственно с созданным меню, а просто предложу два варианта (что называется, на выбор) :

 
Код:
Dim iControl As Control
For Each iControl In Me.Controls
    If TypeOf iControl Is Menu Then
       MsgBox "Это то, что Вы ищите", , ""
    End If
Next


 
Код:
Dim iControl As Control
For Each iControl In Me.Controls
    If TypeName(iControl) = "Menu" Then
       MsgBox "Это то, что Вы ищите", , ""
    End If
Next
1.8K
12 февраля 2008 года
NextTime
217 / / 19.12.2007
как раз то что нужно! не спрашивайте, так скажу) у меня многоязычная прога, и мне всеравно надо перебирать и переименовывать все элементы управления, в т.ч. и меню. спасибо! тему пока не удаляте))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог