Создание контролов из модуля класса и события _click и т.п.

Программирование на Visual Basic for Applications
Vector-xxx
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.09.2006 (Вт) 8:15

Создание контролов из модуля класса и события _click и т.п.

Сообщение Vector-xxx » 27.09.2006 (Ср) 7:26

Создаю форму.
Создаю модуль класса, в котором объявляю несколько объектов контролами (метки, кнопки, текст боксы)
Затем добавляю код в форму, что бы при инициализации формы создавался объект моего класса.
При старте создаются все контролы, все нормально.
Добавляляю функции типа "кнопка1_Click" в код модуля класса и ... контролы не реагируют. Тоесть не вызываются соответствующие функции.
Подскажите, плиз, в чем моя ошибка?

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 27.09.2006 (Ср) 9:04

процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

Vector-xxx
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.09.2006 (Вт) 8:15

Сообщение Vector-xxx » 05.10.2006 (Чт) 10:14

В продолжение предыдущего топика...
Разобрался немного с интерфейсом, но один вопрос сам решить не могу: в созданной мной форме имеется две кнопки, при нажании на одну создается объект моего класса (на форме создается два текст-бокса и одна кнопка), вторая кнопка уничтожает объект (контролы с формы пропадают).
При изменении полей текст боксов программа ведет себя нормально, тоесть объект мого класса можно удалить (set myObjeсt = nothing ).
При нажатии на кнопку созданного объекта форма скрывается "MyForm.hide" , затем появляетя вновь "MyForm.show". После этого объект не удается удалить (нажатием предназначенной для этого кнопки на форме).
Тоесть методы скрытия/появления формы вызываются из модуля класса данного объекта , а удаление (уничтожение) объекта происходит (должно происходить) по команде из формы.
Подскажите какое есть решение проблемы.
Спасибо!

Vector-xxx
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.09.2006 (Вт) 8:15

Сообщение Vector-xxx » 05.10.2006 (Чт) 11:21

Уточнение.
При нажатии на унопку удаления объекта из формы сам объект остается, поскольку контролы им созданные на форме по-прежнему присутствуют, а также при нажатии на кнопку моего объекта форма скрывается а затем снова появляется.
Ощущение такое, что при скрытии и появлении формы вместо моего объекта удаляется что-то другое, либо ничего не удаляется, поскольку программа продолжает работать и ни каких ошибок не выдает.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.10.2006 (Чт) 11:29

Похоже проявляются циклические ссылки... показал бы ты код
Весь мир матрица, а мы в нем потоки байтов!

Vector-xxx
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.09.2006 (Вт) 8:15

Сообщение Vector-xxx » 05.10.2006 (Чт) 16:02

На форме "mz"создаем 3 кнопки:

Код: Выделить всё
Option Explicit
Const mMax = 4
Private i As Byte
Public mCount As Byte
Private M(1 To mMax) As TheCon

Private Sub UserForm_Initialize()
mCount = 0
End Sub

Private Sub ComBut1_Click()  'Добавить конус (объект)
If mCount < mMax Then
mCount = mCount + 1
Set M(mCount) = New TheCon
End If
End Sub

Private Sub ComBut2_Click()  'Убрать конус (объект)
If mCount >= 1 Then
Set M(mCount) = Nothing
mCount = mCount - 1
End If
End Sub

Private Sub ComBut6_Click()  'Удаляем все конусы и выходим из программы (на форме должен остаться хоть один объект, иначе ошибка переполнения)
For i = 1 To mCount - 1 Step 1
Set M(i) = Nothing
Next i
End
End Sub


Модуль класса TheCon:

Код: Выделить всё
Option Explicit
Private WithEvents MyTBoxControl1 As TextBox
Private WithEvents MyTBoxControl2 As TextBox
Private WithEvents MyCButControl As CommandButton
Private strTBox1 As String
Private strTBox2 As String
Private strCBut As String
Dim y As Integer ' Индекс объекта "конус"
Const s = 24 ' это шаг смещения контролов по вертикали

Private Sub class_Initialize()
y = mz.mCount
strTBox1 = "MyTBoxControl1" & Str(y)
strTBox2 = "MyTBoxControl2" & Str(y)
strCBut = "MyCButControl" & Str(y)

Set MyTBoxControl1 = mz.Controls.Add("Forms.Textbox.1", strTBox1)
With MyTBoxControl1:
.Height = 18: .Width = 42: .Left = 30: .top = s * y: .Text = "0"
End With

Set MyTBoxControl2 = mz.Controls.Add("Forms.Textbox.1", strTBox2)
With MyTBoxControl2:
.Height = 18: .Width = 42: .Left = 90: .top = s * y: .Text = "0"
End With

Set MyCButControl = mz.Controls.Add("Forms.CommandButton.1", strCBut)
With MyCButControl:
.Height = 18: .Width = 42: .Left = 150: .top = s * y: .Caption = "вычислить"
End With

End Sub

Public Sub MyCButControl_Click()
mz.Hide
' здесь некий код
mz.Show
End Sub

Private Sub class_Terminate()
mz.Controls.Remove strTBox1
mz.Controls.Remove strTBox2
mz.Controls.Remove strCBut
End Sub

Vector-xxx
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.09.2006 (Вт) 8:15

Сообщение Vector-xxx » 10.10.2006 (Вт) 8:03

Вопрос разрешился.
Всем спасибо за помошь!


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 64

    TopList