Реализация полиморфизма

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nikonik
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 12.07.2006 (Ср) 10:55

Реализация полиморфизма

Сообщение Nikonik » 14.07.2006 (Пт) 11:18

VB называют полностью ООП. Скажите - как на нем реализовать полиморфизм.

Т.е. я на форме создаю динамически (ну в смысле в программе, а не конструкторе) новые экземпляры класса - например метки и хочу сделать так, чтобы по щелчку на первой - вывалилвался msgbox, по второй - менялся цвет, по третьей - создавалась новая форма и т.д.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 11:23

a) Ты создаёшь контролы, а это не совсем тоже самое, что и классы... Хотя они и являются объектами.
б) А в чём конкретно проблема? Что именно не получается?
Изображение

onell
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 131
Зарегистрирован: 21.06.2006 (Ср) 16:04
Откуда: 2taev City

Сообщение onell » 14.07.2006 (Пт) 11:30

Новая форма:
Код: Выделить всё
Private fmLog As Form1
Set fmLog = New Form1

Цвет:
Код: Выделить всё
form1.BackColor=vbRed

MsgBox:
Код: Выделить всё
If MsgBox("Вопрос", vbYesNo, "Заголовок") = vbYes Then...

Nikonik
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 12.07.2006 (Ср) 10:55

Сообщение Nikonik » 14.07.2006 (Пт) 11:39

keks-n не получается определить функции для создаваемых объектов одноименные (например _Click)

onell спасибо, я знаком с базовыми принципами VB и ООП. Проблема не в том чтобы поменять цвет формы или вывести диалог да-нет, а чтобы сделать это по щелчку на новосозданных объектах.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 11:47

Nikonik
И не должно. Функции для ловли евентов VB генерит только для объектов, о которых знает. О свежесозданных он не знает ничего. Есть 2 пути:
1) Массив конторолов-создать в нём один, а потом добавлять через LOAD, тогда VB сгенерит отлов событий, где первый параметр-индекс
2) Сделать, например так:

В General:
Private WithEvents a as PictureBox


В Form_Load или где-то ещё:
Set a=Me.Controls.Add("VB.PictureBox","NewPicture")
a.Visible=True

После чего события для этого контрола обрабатываются как для a, например a_Click
Изображение

onell
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 131
Зарегистрирован: 21.06.2006 (Ср) 16:04
Откуда: 2taev City

Сообщение onell » 14.07.2006 (Пт) 11:57

Код: Выделить всё
Dim i As Integer
Dim j As Integer
Private Sub btnAudit_Click(Index As Integer)
   Audit = Trim(btnAudit(Index).Caption)
   fmComp.Show
   Me.Enabled = False
End Sub

Private Sub Form_Load()
'===============================================
'
'===============================================     i = btnAudit.UBound
    With dtAudit
       .DatabaseName = App.Path & "\db3.mdb"
       .RecordSource = "Список"
       .Refresh
       With .Recordset
          .MoveFirst
          Do While Not .EOF
             If Corp = .Fields(0) Then
                 For j = 0 To i
                    If btnAudit(j).Caption = .Fields(1) Then
                       Exit Do
                    End If
                 Next j
                 Load btnAudit(i + 1)
                 i = i + 1
                 btnAudit(i).Top = btnAudit(i - 1).Top + btnAudit(i - 1).Height + 120
                 btnAudit(i).Left = btnAudit(i - 1).Left
                 btnAudit(i).Caption = Trim(.Fields(1))
                 btnAudit(i).Visible = True
             End If
             .MoveNext
          Loop
       End With
    End With
    btnAudit(0).Visible = False
End Sub


создание нескольких кнопок на форме и реакция на нажатие на одну из них

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 12:02

onell
Этот метод на самом деле не совсем правильный... Допустим ты пигшешь ActiveX и на родительскую форму надо добавить некие контролы. Ты что будешь выдавать MsgBox ("Положить пожалуйста на форму невидимую кнопку с индексом 0")? :)
Изображение

onell
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 131
Зарегистрирован: 21.06.2006 (Ср) 16:04
Откуда: 2taev City

Сообщение onell » 14.07.2006 (Пт) 12:06

2 keks-n согласен

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.07.2006 (Пт) 13:55

keks-n писал(а):a) Ты создаёшь контролы, а это не совсем тоже самое, что и классы... Хотя они и являются объектами.
Совсем любой контрол является классом.
Нелишне напомнить, что существует класс VBControlExtender.
Для организации "полиморфизма" рекомндуется объвить общий интерфейс и обязать все классы, которые должны в этом "полиморфизме" участвовать реализовать этот интерфейс.
(хотя я может недопнял понятие полиморфизм?)
Автору: можеш принвести пример на другом ООП-языке что бы показать чего тебе хочется от VB?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 14:01

ANDLL
Я писал так потому, что контрлы в VB нельзя создать через New.
Изображение

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 14.07.2006 (Пт) 15:05

keks-n
но можно через Load
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 15:16

Я писал(а):Этот метод на самом деле не совсем правильный... Допустим ты пигшешь ActiveX и на родительскую форму надо добавить некие контролы. Ты что будешь выдавать MsgBox ("Положить пожалуйста на форму невидимую кнопку с индексом 0")?


Но наверное надо было мне написать не
а это не совсем тоже самое, что и классы
, а: "а это не совсем тоже самое, что и обычные классы"
Изображение

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 14.07.2006 (Пт) 15:31

keks-n
сори для этого тоже нужен масив контролов
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.07.2006 (Пт) 15:42

keks-n писал(а):ANDLL
Я писал так потому, что контрлы в VB нельзя создать через New.
Исключительно синтаксическое ограничение. Если класс creatable, его можно создать через CreateObject :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList