Обработчик события

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

Обработчик события

Сообщение GeminiPro » 20.07.2008 (Вс) 12:12

Доброго времени суток! Вот есть код

Dim WithEvents NewButton As CommandButton

Private Sub NewButton_Click()
MsgBox "Нажата кнопка"
End Sub
Private Sub Form_Click()
Set NewButton = Controls.Add("VB.CommandButton", "NewButton")
NewButton.Visible = True
NewButton.Height = 1000
NewButton.Width = 1000
NewButton.Top = 0
NewButton.Left = 0
NewButton.Caption = "Нажми меня"
End Sub

здесь программно создается кнопка и обработывается событие click, возникла проблема. Я хочу создать не одну кнопку а массив, т.е NewButton(100) с инициализацией нет проблем, а вот с обработкой события возникли проблемы,. Подскажите пожалуйста как обрабатывать события у массива. В vb.net видал есть AddHandler но в VB 6 не работает. надеюсь поможете решить эту проблемы. Заранее спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2008 (Вс) 12:46

И ты считаешь, что тебе сюда?
Пока переносить не буду, но сомнения у меня уже есть.
Задача же решается стандартно, нужен класс-посредник, который содержит добавляемые кнопки. Кнопки вызывают процедуру из родительского класса, родительский класс генерирует событие.
Lasciate ogni speranza, voi ch'entrate.

GeminiPro
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 20.07.2008 (Вс) 12:06

Сообщение GeminiPro » 20.07.2008 (Вс) 13:06

alibek писал(а):И ты считаешь, что тебе сюда?
Пока переносить не буду, но сомнения у меня уже есть.
Задача же решается стандартно, нужен класс-посредник, который содержит добавляемые кнопки. Кнопки вызывают процедуру из родительского класса, родительский класс генерирует событие.

Ну так если все так просто, напиши исходник, а я посмотрю!

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 20.07.2008 (Вс) 13:40

Я думаю что alibek имелвиду чтото вроде этого

Код: Выделить всё
'in Class

Public WithEvents command1 As VB.CommandButton
Private Sub command1_Click()
    MsgBox command1.Caption
End Sub

'in Form1

Dim Commands(9) As Class1
Private Sub Form_Load()
Dim num As Integer
For num = 0 To 9
    Set Commands(num) = New Class1
    Set Commands(num).command1 = Controls.Add("VB.CommandButton", "Commands" & num, Me)
    Commands(num).command1.Top = num * 300
    Commands(num).command1.Visible = True
    Commands(num).command1.Width = 300
    Commands(num).command1.Height = 300
    Commands(num).command1.Caption = CStr(num)
Next num
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2008 (Вс) 13:42

Да, таки перенести.
GeminiPro, tag_warning (1).
Lasciate ogni speranza, voi ch'entrate.

GeminiPro
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 20.07.2008 (Вс) 12:06

Сообщение GeminiPro » 20.07.2008 (Вс) 13:48

Спасибо огромное

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2008 (Вс) 13:49

Готовое решение в форуме выкладывалось неоднократно, только не помню уже, по каким словам искать. Oxygen или Rainbow выкладывала, помоему.
Схематично примерно так:
Код: Выделить всё
'класс-посредник

Private colObjects As Collection

Public Event Click(Sender As Object)

Private Sub Class_Initialize()
Set colObjects = New Collection
End Sub

Private Sub Class_Terminate()
Set colObjects = Nothing
End Sub

Private Sub Add()
Dim obj As Object
Set obj = New <object>
Set obj.Parent = Me
colObjects.Add Key:=CStr(ObjPtr(obj)), Item:=obj
End Sub

Private Sub Clear()
Dim obj As Object
For Each obj In colObjects
  Set obj.Parent = Nothing
Next obj
While colObjects.Count > 0
  colObjects.Remove 1
Wend
End Sub

Friend Sub FireClickEvent(Sender As Object)
RaiseEvent Click(Sender)
End Sub



'класс-объект
Public Parent As <parent-object>

Private Sub obj_Click()
If Not (Parent Is Nothing) Then Parent.FireClickEvent Me
End Sub
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2008 (Вс) 13:50

Atoman, да, примерно так. Только в таком виде пользоваться не очень удобно.
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList