想要使用VB提供的應用程式架構, 但又想自己控制初始執行表單的順序...
這是上課時同學問的問題.
他的問題細節是這樣的, 要先有一個登入視窗, 通過登入流程之後, 顯示SplashScreen 之後才是MainForm.
過去我們會將這程序寫在Sub Main, 然後專案的"啟動表單"指定成為Sub Main.
但是在Visual Studio的Visual Basic專案, 若要指定Sub Main必須將"啟用應用程式架構"停用, 這代表無法享用Visual Baisc提供的應用程式架構, 這個同學的需求中又需要用到這個架構, 該如何解決這問題呢?
測試了一下, 我的解決方案如下:
Step1.使用 "檢視應用程式事件"
Step2.在ApplicationEvents.vb 覆寫 OnInitialize 方法
Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
LoginForm1.ShowDialog()
If User.IsAuthenticated Then
Return MyBase.OnInitialize(commandLineArgs)
End If
End Function
使用User.IsAuthenticated 檢查是否通過驗證, 如果通過驗證才繼續初始化(呼叫 MyBase.OnInitialize(commandLineArgs) ), 如果未呼叫MyBase.OnInitialize的話, Application不會繼續初始化, 應用程式就會自動結束.
完成!!
A1: 為什麼要覆寫OnInitialize 而不寫在Statup 事件?
Q1: 因為Statup事件已經啟動SplashScreen, 不符合要先Login 再進SplshScreen 的需求. 而且無法控制登入失敗要終止程式(無法呼叫Application.Exit方法)
A2: 怎麼寫LoginForm1的程式?
Q2: 以下步驟解說:
step1: 加入新項目, 選取"登入表單"
step2: 允許兩次登入失敗, 宣告變數記錄
Dim errorTry As Short = 0
step3: 修改OK 按鈕的Click事件如下: (要Imports System.Security.Principal)
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim roles() As String
If Not CheckUser(UsernameTextBox.Text, PasswordTextBox.Text, roles) Then
errorTry += 1
If errorTry >= 3 Then
Me.Close()
End If
Return
End If
Dim iden As New GenericIdentity(UsernameTextBox.Text)
My.User.CurrentPrincipal = New GenericPrincipal(iden, roles)
Me.Close()
End Sub
在登入成功之後, 設定My.User.CurrentPrincipal, 就可以讓User.IsAuthenticated 回傳True.
step4: CheckUser 方法是寫檢查帳號密碼的程式, 請自行設計, 下列程式僅供參考.
Private Function CheckUser(ByVal Username As String, ByVal Password As String, ByRef Roles() As String) As Boolean
If String.IsNullOrEmpty(Username) Then
Return False
End If
Roles = New String() {"Users"}
Return True
End Function
羅老師您好!
回覆刪除買了您的書(VB2008最佳實務講座)才知道您有blog,我之前有在台中跟台北恆逸上過SQL的課,雖沒有上過您的課,但您寫的書很有"功力",也給我很多的啟發、讓我學到很多新的東西!(即使在看過好幾本VB的書籍,也練習寫過一些程式之後)
我想跟老師您請教一個Disk Buffer的問題,因為我要讀取的檔案過大,光一個就數十到上百MB,可以請問老師提供我哪裡有書籍或是網頁資料,可以找到這個技術的運作原理? 讓我可以順利的應用在實作上! (我上台北天瓏書局找遍所有的VB中英文書都找不到相關的資料) 我目前為止僅接觸過VB2008這個程式 (我是寫程式的初學者),或許其他書也會提到也說不定,希望老師能撥空為我解個惑!
如果可以的話,可以請老師您回信到我下面的信箱,或是發表意見到我剛申請的BLOG嗎?
http://jackson-lai.blogspot.com/
jlai.2006小老鼠m2k.com.tw
學生在此感激不盡!