Код возврата модального окна?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kaa
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.09.2003 (Ср) 9:53
Откуда: Киев

Код возврата модального окна?

Сообщение Kaa » 24.09.2003 (Ср) 12:41

Продолжу, с вашего разрешения, задавать "чайницкие" вопросы.

Можно-ли запустить свою форму в модальном режиме и получить обратно код возврата а-ля MsgBox? Насколько я понял, метод Show не возвращает ничего, да и куда присвоить этот код возврата? Есть-ли стандартные средства, а то мне ничего проще, чем:
Код: Выделить всё
Private ModalResult As Integer

Public Function ShowModal() As Integer
  Me.Show vbModal
  ShowModal = ModalResult
End Function

Private Sub btnCancel_Click()
  ModalResult = vbCancel
  Unload Me
End Sub

Private Sub btnOK_Click()
  ModalResult = vbOK
  Unload Me
End Sub

в голову не приходит.
Опыт - это такая вещь, которая появляется сразу после того, как была нужна.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.09.2003 (Ср) 13:05

На форме (frmTest):
Код: Выделить всё
Option Explicit

Private Sub cmdCancel_Click()
Tag = "CANCEL"
Hide
End Sub

Private Sub cmdOK_Click()
Tag = "OK"
Hide
End Sub

Private Sub Form_Load()
Tag = vbNullString
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = QueryUnloadConstants.vbFormControlMenu Then
  Cancel = True
  cmdCancel_Click
End If
End Sub


Вызов:
Код: Выделить всё
Dim res As Boolean
res = GetFormResult()
MsgBox "Result: " & IIf(res,"OK","CANCEL")

...

Function GetFormResult() As Boolean
Load frmTest
'Form initialization
With frmTest
  .Caption = "Test"
End With
frmTest.Show vbModal
GetFormResult = (frmTest.Tag = "OK")
Unload frmTest
Set frmTest = Nothing
End Function
Lasciate ogni speranza, voi ch'entrate.

Kaa
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.09.2003 (Ср) 9:53
Откуда: Киев

Сообщение Kaa » 24.09.2003 (Ср) 13:57

А чем этот вариант (как я понял, встроенных возможностей нема) лучше? Мой вариант имхо проще и понятнее. Это ни в коем разе не наезд. Мой уровень в VB пока чуть выше плинтуса и я возможно не заметил каких-то граблей в своем варианте.

Слегка подправил код:
Код: Выделить всё
Option Explicit

Private ModalResult As Integer

Public Function ShowModal() As Integer
  Me.Show vbModal
  ShowModal = ModalResult
End Function

Private Sub btnCancel_Click()
  ModalResult = vbCancel
  Unload Me
End Sub

Private Sub btnOK_Click()
  ModalResult = vbOK
  Unload Me
End Sub

Private Sub Form_Load()
  ModalResult = vbCancel
End Sub

Для вызова:
Код: Выделить всё
  If frmTest.ShowModal = vbOK Then
    Label1.Caption = "OK"
  Else:
    Label1.Caption = "Someting Wrong"
  End If
Опыт - это такая вещь, которая появляется сразу после того, как была нужна.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.09.2003 (Ср) 15:21

Он не лучше, просто в этом способе не используются глобальные переменные.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 11

    TopList