Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.07.2007
Сообщений: 110
1

Обработка событий формы в классе

05.09.2007, 09:20. Просмотров 1028. Ответов 3
Метки нет (Все метки)

Я создаю библиотеку, в ней одна форма MyForm и модуль класса MyClass. В форме объявлено событие

Visual Basic
1
Public Event OkClicked()
Событие возникает при нажатии кнопки Ok
Visual Basic
1
2
3
Private Sub btnOk_CLICKED()
RaiseEvent OkClicked
End Sub
В классе объявлена форма
Visual Basic
1
Dim WithEvents MyFormNew As MyForm
Метод показа формы
Visual Basic
1
2
3
4
Public Sub Show()
Set MyFormNew = New MyForm
MyFormNew.Show
End Sub
Обработчик события
Visual Basic
1
2
3
Private Sub MyFormNew_OkClicked()
MsgBox 'Ura'
End Sub
Проблема в том, что событие из формы не передается в класс. Т.е. в форме я нажимаю на кнопку Ок, но сообщение 'Ura' не появляется. Может быть, кто-нибудь знает, как решить проблему.
PS. Не забывайте, что это библиотека и копию класса в форме делать нельзя (по-моему)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2007, 09:20
Ответы с готовыми решениями:

Обработка событий в форме.
Risuju kartinky :) Sreda razrabotki : Excel 97 Y menja est' forma i mne nado v nei...

Обработка событий TextBox
На форм TetBox. Необходим только ввод цифр. Подпрограмма обработки: Private Sub...

Обработка событий мыши и клавиатуры на vb6
Нужна помощ,подскажите сайт или сбросте материал по теме: обработка событий мыши и клавиатуры на...

Обработка событий для динамически созданных элементов управления
VBA (Office97) позволяет динамически создавать элементы управления (при выполнении программы). Но...

3
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
05.09.2007, 13:51 2
Копию класса в форме делать можно, а иначе не получится.
Создай свойство в форме - типа твоего класса и передай свой класс при инициализации. А в классе сделай метод вызова события.

Visual Basic
1
2
3
4
5
6
7
8
9
10
'class MyClass
friend sub FireEventOK()
   MsgBox 'Ura'
end sub
 
Public Sub Show()
Set MyFormNew = New MyForm
MyFormNew.MyClass=me
MyFormNew.Show
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'form MyForm
private mvarMyClass as MyClass
friend property Let MyClass(vData as MyClass)
  set mvarMyClass =vData
end property
 
Private Sub btnOk_CLICKED()
 
   mvarMyClass.FireEventOK
 
End Sub
0
0 / 0 / 1
Регистрация: 29.07.2007
Сообщений: 40
05.09.2007, 16:41 3
Vot tak poprobuy:
---------------------------------
Main form s knokoy v proerte dla proverki DLL

Visual Basic
1
2
3
4
5
Private lgMyClass As Test.MyClass
 
Private Sub cmdOk_Click()
    Set lgMyClass = New Test.MyClass
End Sub
MyClass v DLL Test
---------------------------------------
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private WithEvents MyFormNew As MyForm
 
 
 
Private Sub MyFormNew_OkClicked()
MsgBox 'Ura'
End Sub
 
 
Private Sub Class_Initialize()
Set MyFormNew = New MyForm
    MyFormNew.Show
End Sub
 
 
Private Sub Class_Terminate()
     Set MyFormNew = Nothing
End Sub
My Form v DLL Test
-----------------------------
Visual Basic
1
2
3
4
5
6
7
8
9
Public Event OkClicked()
Public Sub FormShow()
    Set MyFormNew = New MyForm
    MyFormNew.Show
End Sub
 
Private Sub cmdOk_Click()
    RaiseEvent OkClicked
End Sub
=========================
Provereno - rabotaet.

Zamecheniya:
Dla formy luche vsego opredelit' otdel'nye metody dlya otkrytiya i dlya unichtojeniya. Naprimer : OpenDialog i Terminate

Uklassa MyClass toje doljny byt' otdel'nye public metody dlya inicializacii i unichtojeniya.

Udachi

http://aibase.uka.ru
0
Vsh
05.09.2007, 16:49 4
Передаю совет который сам тут получил:

Используй WithEvents:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
'** Class_1***
Dim frm as New Form1 'содержит кнопку OK
Dim WithEvents btn As CommandButton
 
Public Sub ShowFrm()
frm.Show
Set btn=frm.Command1
End Sub
 
Private Sub btn_Click()
MsgBox 'Класс1'
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
'** Class_2***
Dim frm as New Form1 'содержит кнопку OK
Dim WithEvents btn As CommandButton
 
Public Sub ShowFrm()
frm.Show
Set btn=frm.Command1
End Sub
 
Private Sub btn_Click()
MsgBox 'Класс2'
End Sub
Visual Basic
1
2
3
4
5
6
7
'***** использование *****
Public C1 As New Class_1, C2 As New Class_2
C1.Show
'если нажать Command1 выполнится MsgBox 'Класс1'
 
С2.Show
'если нажать Command1 выполнится MsgBox 'Класс2'
С1 и С2 должны еще жить при нажатии на кнопку, поэтому я их описал как Public, но в принципе можно описывать локально для процедуры, если ты уверен что процедура не закончится покак не выйдут из формы, если она закончится , то возможна ситуация что нажмут на Command1, а С1 и С2 уже не существует и естественно ни чего не сработает.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2007, 16:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обработка событий в классе QSystemTrayIcon
Подскажите, пожалуйста, можно ли в классе, производном от QSystemTrayIcon, сделать так, чтобы...

Обработка событий не в том классе
Мне необходимо навесить обработку события - клик по ноду- на CTreeCtrl. Все отлично, с помощью...

Обработка событий элементами формы
Среда - Borland C++. Элемент формы Button имеет обработчик события на Clic где код работы с WINAPI...

Обработка 2х событий при отправке формы
Здравствуйте. Имеется следующая проблема в задаче. При нажатии на клавишу в окне браузера...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.