VB 6 Почему чтение переменной в имя объекта не работает?

Кирилл

Команда форума
Администратор
Сообщения
13,580
Симпатии
6,018
Баллы
843
#1
Всем здравствуйте.
Столкнулся с интересным моментом, которому не могу дать объяснение...

Допустим, имеем пункт меню Menu Editior
Назовем как угодно этот пункт меню и присвоим какой нибудь переменной его значение Name
Затем, если присвоить это значение переменной - то к переменной в качестве имени пункта меню обратиться нельзя.
Код:
Dim strName as String
strName = Menu.Name
' В переменную получаем имя меню, к которому можно обратиться.
MsgBox strName ' Убедились в этом
MsgBox strName.Caption ' Получаем ошибку
Попытка убрать кавычки ни к чему не приводит
Replace(strName, """", "")

Но при этом обращаться таким же методом к Label, image и так далее можно без проблем.
В чем причина? Ограничения или нужен какой то друой подход?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,963
Симпатии
5,785
Баллы
588
#2
Странно, что ты не получил ошибку ещё раньше (на 2-й строке).
Menu - это название класса. А ты, похоже, используешь его как имя объектной переменной. Так нельзя делать. Для начала присвой своему меню любое другое имя, не пересекающееся с зарезервированными именами.

strName - у тебя не объект, а строка. У неё нет ни свойств, ни методов.
Её нельзя использовать так, как ты хочешь.

Но при этом обращаться таким же методом к Label, image и так далее можно без проблем.
Это не правда. Если ты ведёшь речь о массиве контролов, то это другое, и обращаешься к ним ты все равно по индексу.

Если ты хочешь перебрать все меню, то это тоже контрол. Он находится в коллекции Controls:
VB.NET:
    Dim c As Control
    Dim m As Menu
   
    For Each c In Controls
        If TypeOf c Is Menu Then
            Set m = c
            Debug.Print m.Caption
        End If
    Next
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,963
Симпатии
5,785
Баллы
588
#4
Что же тут печального. Напиши свой класс и он будет работать так, как ты хочешь :)
Можешь собрать в нём коллекцию всех меню и обращаться к ним по имени.

Есть ещё менее документированные пути. Но зачем тебе так делать, у тебя же не 100 разных меню. Ну максимум 3-5 с подпунктами у каждого.
Можешь посмотреть это. Я не совсем уверен, что ты собрался с этим меню делать.
 

Кирилл

Команда форума
Администратор
Сообщения
13,580
Симпатии
6,018
Баллы
843
#5
у тебя же не 100 разных меню. Ну максимум 3-5 с подпунктами у каждого.
4, в сововкупе 3 десятка подпунктов.
Ума сначала не хватило сделать логическую структуру, что бы циклом обрабатывать.
А теперь переписывать дофига) Выкрутился переменной.
Определяет чекбокс активного пункта, в переменную сохраняется значение.
 
Сверху Снизу