Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
У меня есть 6 классов

Ндяя, не надо было школу бросать :)


2VBD, у кого что болит, тот о том и говорит? :))

Псол... :)

Ответить

Номер ответа: 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 классов закончил.

и ниразу не повторял :-P

2.HACKER
а то что я еще на программера не выучился, это не так страшно, тока с сентября начну, грысть гранит.... :)

Ответить

Номер ответа: 10
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #10
Добавлено: 25.06.07 15:01
Я еще блин ее не кончил :) Попа :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам