Последовательное открытие форм и возвращение результата в ин

Программирование на Visual Basic for Applications
Raiwo
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 11.04.2005 (Пн) 18:35

Последовательное открытие форм и возвращение результата в ин

Сообщение Raiwo » 16.03.2006 (Чт) 9:30

Есть три одинаковые формы Frm1, Frm2, Frm3. Форма состоит из одной кнопки cbtOk и текстового поля lblText.
Задача из lblText Frm3 перенести значение в lblText инициирующей формы.
Например : Frm3(Parent) -> Frm2(Child)
Frm3(Parent) -> Frm2(Child/Parent) -> Frm1(Child)
Frm2(Parent) -> Frm1(Child)
Реализация:
Создаем класс clsFrom для обработки событий OnLoad и OnUnload

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


Private WithEvents clsFrm As Form         '
Private blnUnloadFrm Boolean                 ' Разрешение на закрытие формы
Private strNmParent As String           ' Имя Parent-а

' Свойства формы
Public Property Set Form(Value As Form)
Set clsFrm = Value
    clsFrm.OnLoad = "[Event Procedure]"       ' Загрузка
    clsFrm.OnUnload = "[Event Procedure]"   ' Выгрузка
End Property

Public Property Get Form() As Form
    Set Form = clsFrm
End Property

Private Sub clsFrm_Load()
    Dim strNmFrom As String
    On Error Resume Next
' Если форма открыта путем создания переменной класса этой формы,
' то обратиться к ней через семейство Forms невозможно.   

strNmFrom = Forms(clsFrm.Name).Name
    If Err.Number = 0 Then
        blnUnloadFrm = True
    Else
        blnUnloadFrm = False
    End If
End Sub
   
Private Sub clsFrm_Unload
   If  not blnUnloadFrm then
      clsFrm.Visible = False
          Cancel = True   
   end if      
End sub


На каждую форму добавляю :
Код: Выделить всё

Private mFrm As clsFrom
   
Private Sub Form_Open(Cancel As Integer)
          Set mFrm = New clsTFrm ' создаем класс
          Set mFrm.Form = Me.Form ' устанавливаем ссылку
End Sub


Для кнопок :

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

Private Sub cbtOk _Click()
   Call FrmCmdOpen(New Form_Frm2, Me.Name)
End Sub



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

Public Sub FrmCmdOpen(frm As Form , strNmParent As String)
    frm.Visible = True
   
    While frm.Visible
        DoEvents
    Wend

End Sub


Вопрос заключаеться в слудющем:

Нужно передать в форму два параметра, чтобы к ним можно было обратиться в процедуре FrmCmdOpen :
1. NmParen as string
2. UnloadFrm as boolean
т.е.
Код: Выделить всё

Public Property Let  NmParen (strValue as string)
        strNmParen= strValue
    End  Property
   
    Public Property Get  NmParen () as string
        NmParen =strNmParen
    End  Property
   
    Public Property Let  UnloadFrm (blnValue as boolean)
           blnUnloadFrm= blnValue
    End  Property
   
    Public Property Get  UnloadFrm () as boolean
           UnloadFrm =  blnUnloadFrm
    End  Property


Пытаюсь вставить в класс но при обращение к форме пишет что не задан объект. Подскажите как их правильно добавить ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.03.2006 (Чт) 10:03

Причём здесь базы данных... Ну это ладно...


Вообще, самобытное решение, даже очень, и даже немного слишком...

frmMain
Код: Выделить всё
private sub cmdSearch_Click()
dim f as frmChild
set f=new frmChild
f.show vbmodal
text1.text = f.SearchResult
end sub


frmChild
Код: Выделить всё
private mResult as string

public property get SearchResult() as string
  SearchResult=mresult
end property

private sub cmdOK_Click()
  mresult=text1.text
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Raiwo
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 11.04.2005 (Пн) 18:35

Сообщение Raiwo » 16.03.2006 (Чт) 12:28

Спасибо GSerg за совет.С рубрикой я действительно ошибся.
Только проблема в том что пишу я на VBA в среде MS ACCESSа и show для form там отсутсвует, а у form есть только Visible.
А идея заключалось в том чтобы создать класс или несколько класов и ими расширть свойства и методы FORM, при этом не писать кучу кода в каждой форме.
Сам с классами работаю недавно по этому и интересуюсь как такое можно реализовать. Как на события (OnUnload) создать свой универсальный обработчик я разобралься, а вот как при этом еще и свои свойтва завести?
Простно не хочеться в каждую форму копировать один и тот же код.


Вернуться в VBA

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

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

    TopList