2012-02-03 2 views

ответ

11

В вашей форме входа в систему я предполагаю, что вы выполняете проверку внутри метода событий для управления кнопкой. Таким образом, вы бы что-то вроде:

Private Sub btnLogin_Click() 
    If ValidatePassword(txtPassword.Text) Then 
     ' The password is correct, so show the main form and close the login form 
     MainForm.Show 
     Unload Me 
    Else 
     ' The password is incorrect, so leave this form on screen 
     MsgBox "Invalid password entered!", vbError 
     txtPassword.SetFocus 
    End If 
End Sub 

Этих двух интересных особенностей этого кода:

  1. Show метод, который вы вызываете на форме объекта, который вы хотите показать.
    В этом случае это, вероятно, будет вашей основной формой - замените MainForm тем, что вызывается.

  2. Оператор Unload, который закрывает и уничтожает указанную форму.
    В этом случае Me относится к форме входа в систему, так как вы закончили с ней.

+1

+1 Хороший пример –

1

Вам необходимо позвонить по телефону Show по форме, которая должна отображаться после регистрации. Вы можете узнать больше о Understanding Forms and form events

1

Мой подход заключается в том, чтобы избежать попытки открыть форму входа в качестве первой формы.

Вместо этого пусть основная форма будет первой и в ее событии загрузки Покажите свою форму входа в систему как модальный диалог. Это можно сделать, показывая основную форму сначала, выполнив показ на ней. Пример, основанный на стандартном шаблоне "Вход в систему" Диалог формы с некоторыми изменениями кода:

frmMain.frm

Option Explicit 

Private Sub Form_Load() 
    Dim Control As Control 

    Show 
    frmLogin.Show vbModal, Me 
    With frmLogin 
     txtSuccess.Text = CStr(.LoginSucceeded) 
     If .LoginSucceeded Then 
      'Proceed normally, perhaps after capturing 
      'the User Name, etc. 
      txtUserName.Text = .User 
      txtPassword.Text = .Password 
     Else 
      'Do "Unload Me" or disable all controls 
      'as shown here, etc. 
      For Each Control In Controls 
       On Error Resume Next 
       Control.Enabled = False 
       On Error GoTo 0 
      Next 
     End If 
    End With 
    Unload frmLogin 
End Sub 

frmLogin.frm

Option Explicit 

Public LoginSucceeded As Boolean 
Public User As String 
Public Password As String 

Private Sub cmdCancel_Click() 
    LoginSucceeded = False 
    Hide 
End Sub 

Private Sub cmdOK_Click() 
    'Check for correct password, hard-coded here. 
    If txtPassword.Text = "password" Then 
     LoginSucceeded = True 
     User = txtUserName.Text 
     Password = txtPassword.Text 
     Hide 
    Else 
     MsgBox "Invalid Password, try again!", , "Login" 
     With txtPassword 
      .SetFocus 
      .SelStart = 0 
      .SelLength = Len(.Text) 
     End With 
    End If 
End Sub 
+0

Модальные диалоги, вероятно, являются лучшим решением. Мой ответ предполагал, что у этого уже было, но не всегда лучший подход! –

+0

Этого также не должно быть сделано из Form_Load, это также может быть результатом меню или кнопки, чтобы инициировать вход в систему ... предполагая, что есть большая точка в том, что форма видима и активна до входа в систему. Возможно, вы входите в систему с разными учетными данными для последовательных сеансов во время одного запуска. – Bob77

Смежные вопросы