Страница: 1 |
Страница: 1 |
Вопрос: Как правильно делать классы для открытия окон
Добавлено: 14.11.05 18:02
Автор вопроса: Pantalone
Нужно в приложении вызывать много форм, которые по сути абсолютно идентичны, только данные разные и чтобы обработчики событий в этих окнах друг с другом не конфликтовали. Как это лучше сделать, есть ли примерчик?
Пока вот что делаю: http://pantalone.nm.ru/Class.rar (3 килобайта)
Какие грубые ошибки и может вместо класса все в саму форму запихнуть?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 14.11.05 18:29
dim frmVar as Form
set frmVar=new form1
frmvar.show
а дальше в каждой форме пишешь в событии Load не там тебе надо... (sorry, я твой примерчик не посмотрел... лень-штука зверская)
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 14.11.05 19:18
данные в форме можно изменить в соответствии своего условия. Обработку событий тоже можно наладить, и оптимизировать, при событии проверят условия и далее уже обрабатывать в соответствии... так что всё можно свести к 1 форме...
Номер ответа: 3
Автор ответа:
Pantalone
Вопросов: 32
Ответов: 104
Профиль | | #3
Добавлено: 14.11.05 20:43
Можно вообще пойти дворником работать. Но мне нужна куча однотипных форм и все тут
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 14.11.05 21:36
ну тогда вперёд обрабатывать все событие для всей своей кучи форм )
Номер ответа: 5
Автор ответа:
Pantalone
Вопросов: 32
Ответов: 104
Профиль | | #5
Добавлено: 14.11.05 22:54
И что тут сложного?
Номер ответа: 6
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #6
Добавлено: 15.11.05 06:37
В обработке событий не используй глобальные переменные. Все переменные объявляй в контексте, и конфликтов не будет.
Номер ответа: 7
Автор ответа:
Игорь
ICQ: 335510202
Вопросов: 0
Ответов: 2
Профиль | | #7
Добавлено: 16.11.05 16:19
Лучше, конечно, создать униврсальный класс по работе с формами
1. Так как форм много, то одну и ту же форму можно вызвать, даже если она уже где-то открыта. Поэтому можно предложить следующий вариант. Создать 2 класса. Один отвечает за уникальность коллекции открытых форм и возвращает фокус на вызываемую форму:
1 Класс на уникальность с функцией valReturnForm. Если True форма существует
Public Function valReturnForm(ByVal valTagForm As String) As Boolean
'---
Dim numForm As Long
Dim tmpCountLong As Long
Dim tmp_sForm As String
Dim tmpForms As Form
'---
With Forms
Let tmpCountLong = .Count
If tmpCountLong = 1 Then
Exit Function
End If
For numForm = 0 To (tmpCountLong - 1)
Let tmp_sForm = Forms(numForm).Tag
If StrComp(valTagForm, tmp_sForm, vbTextCompare) = 0 Then
Set tmpForms = Forms(numForm)
Call tmpForms.SetFocus
If tmpForms.WindowState = 1 Then Let tmpForms.WindowState = 0
Let valReturnForm = True
Exit For
End If
Next numForm
End With
End Function
2. Класс на открытие процедура открытия hShowOpen
Public Sub hShowOpen(ByVal valForm As Form)
'---
Dim val_F As Form
Set val_F = valForm
Call Load(object:=val_F)
'---
Call val_F.Show(Modal:=vbModeless, OwnerForm:=Nothing)
Set val_F = Nothing
End Sub
3. Использование
'---
Sub ()
Dim tmpF As Form
Dim vhReturnForm As hReturnForm
Dim vhShowForm As hShowForm
'---
Set tmpF = New fConst
'---
Set vhReturnForm = New hReturnForm
If vhReturnForm.valReturnForm(valTagForm:="fConst" = False Then
Set vhShowForm = New hShowForm
Call vhShowForm.hShowOpen(valForm:=tmpF)
Set vhShowForm = Nothing
End If
'---
Set vhReturnForm = Nothing
End Sub
Вариаций очень много