Страница: 1 |
Страница: 1 |
Вопрос: Сращиваю class и with
Добавлено: 20.06.07 13:19
Автор вопроса: KreAtoR
У меня есть 6 классов, которые имеют одинаковые функции. Различаются они только началом Main.name_of_class
Есть у меня так же одна процедура на форме которую эти классы используют. какой именно класс в данный момент использует процедуру я отлавливаю через функцию
Main.name_of_class.g_name , после чего выбирается определенный Case с таким же именем.
Сижу и смотрю, что код просто дублируется от Case to Case а это не очень красиво. Поэтому возникла идея все сделать через With т.е.
вначале процедуры идет проверка label с именем какого класса был нажат
if label1.caption=main.name_of_class.g_name then , и после того как нужный нам класс определился надо вставить With именно эту разницу классов Main.name_of_class через переменную, а все остальное пойдет само собой.
Я представляю себе это примерно так
Private Sub Initialize_Class_Name(Index as String)
Dim withObject as Object
if Index = main.Class1.g_name then
withObject = Main.Class1
end if
if Index = main.Class2.g_name then
withObject= Main.Class2
End if
With withObject
'ну или что то в этом роде
.l_diametr = 3
.l_wisota = 8
End With
End Sub
Проблема заключается в том, что я не могу в With передать значение через переменную. Как быть и как это сделать?????????
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #1
Добавлено: 20.06.07 16:06
Итак я смог решить эту проблему только таким путем. Если увидите что можно сделать проще то подскажите, буду рад
На форме надо только один Label1
----------Form1--------------
Option Explicit
Dim c1 As New Class1
Dim c2 As New Class2
Private Sub Form_Load()
Label1.Caption = c1.gName
End Sub
Private Sub Label1_Click()
If Label1.Caption = c1.gName Then Template c1
If Label1.Caption = c2.gName Then Template c2
End Sub
Private Sub Template(index As Object)
With index
MsgBox .gName
End With
End Sub
-------------Class1---------------
Option Explicit
Public Property Get gName()
gName = "Name1"
End Property
-------------Class2---------------
Option Explicit
Public Property Get gName()
gName = "Name2"
End Property
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 20.06.07 18:28
Есть конструкция типа If TypeOf ... Is ... Then
Есть функция TypeName(). Передавай в свою функцию указатель на вызывающий экземпляр класса (Me).
А вообще подобная ситуация говорит о в корне неверном подходе.
Номер ответа: 3
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #3
Добавлено: 20.06.07 18:43
не спорю даже соглашусь, что ситуация вполне неправильная. Ну не умею я работать с классами а в ВБ 2002 эту тему постичь еще тяжелей. Это попытка понять, как можно работать с классами.
Номер ответа: 4
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #4
Добавлено: 22.06.07 19:23
With - это же вирус!!!!
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 23.06.07 00:26
2VBD, у кого что болит, тот о том и говорит? )
2KreAtoR, изложи конечную цель, попробуем тебя направить на нужный путь решения задачи. Просто читая твое сообщение, я мало что понял...
Номер ответа: 6
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #6
Добавлено: 23.06.07 11:09
Ндяя, не надо было школу бросать
Псол...
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 23.06.07 22:20
Ну 6 классов он имел ввиду всего, а привёл тут только два, т.к. остальные аналогичные, так что кроме школы, полезно заканчивать ешё что-то
Номер ответа: 8
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #8
Добавлено: 25.06.07 12:21
попробую объяснить. У тебя есть карта, которая делится на квадратики. в некоторых квадратиках находятся объекты. когда ты попадаешь на квадрат где находится объект, то появляется label в именем, ну или названием этого объекта. В классе объекта стоит в каком квадрате он должен появиться (ввиде этого label мы можем видеть что объект здесь есть и как он называется). Теперь надо задействовать этот объект. У меня есть Sub описаный выше. Его цель заключается в том, чтобы в обратном пордке определить, какой класс(объект) в данном случае был выбран пользователем (ведь в одном квадрате могут находиться несколько объектов). Короче после того как мы нажали на Label то вызывается этот Саб и ему передается имя объекта. По этому имени выбирается нужный класс и производятся нужные действия. В частности вызывается окно, в котором должно быть показано, что с этим объектом можно делать. Окно тоже вызывается через определение, какой класс!!! Сначала все лабелы скрываются, а потом открываются ровно столько сколько действий можно произвести с данным объектом это происходит через For Next и труда особого не составляет. Надеюсь что написал все. Если что будет все таки не ясно, скажи добавлю
Номер ответа: 9
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #9
Добавлено: 25.06.07 12:25
в отличии от некоторых я 13 классов закончил.
и ниразу не повторял
2.HACKER
а то что я еще на программера не выучился, это не так страшно, тока с сентября начну, грысть гранит....
Номер ответа: 10
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #10
Добавлено: 25.06.07 15:01
Я еще блин ее не кончил Попа