Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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

Вариаций очень много

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам