350 likes | 564 Views
第 12 章 建立多表單與模組的應用程式. 12-1 Visual Basic 的方案與專案 12-2 模組化 Visual Basic 應用程式 12-3 建立多表單的應用程式 12-4 建立多文件介面的應用程式 12-5 執行外部應用程式. 12-1 Visual Basic的方案與專案. 12-1-1 Visual Basic 的專案 12-1-2 Visual Basic 的方案. 12-1-1 Visual Basic 的專案 - 說明.
E N D
第12章 建立多表單與模組的應用程式 • 12-1 Visual Basic的方案與專案 • 12-2 模組化Visual Basic應用程式 • 12-3 建立多表單的應用程式 • 12-4 建立多文件介面的應用程式 • 12-5 執行外部應用程式
12-1 Visual Basic的方案與專案 • 12-1-1 Visual Basic的專案 • 12-1-2 Visual Basic的方案
12-1-1 Visual Basic的專案-說明 • 在本書前建立的主控台或Windows應用程式,都是隸屬於同名方案的Visual Basic專案。如果準備建立大型應用程式,在一個方案下可能需要建立多個專案。 • Visual Basic專案是方案中的容器,每一個專案可以建立執行檔(.exe)、動態連結程式庫(.dll)或模組(Modules)等。
12-1-1 Visual Basic的專案-專案的基礎 • Visual Basic專案的資訊是儲存在副檔名為.vbproj的檔案,在專案檔案記錄建立應用程式所需的檔案、資料夾和編譯等相關資訊。 • 請開啟或自行建立「範例程式\Ch12\Ch12-1-1」資料夾的Visual Basic專案,就可以在右上角看到「方案總管」視窗,如下圖所示:
12-1-1 Visual Basic的專案-專案的屬性頁(圖例) • 在「方案總管」視窗的【Ch12-1-1】專案上執行右鍵快顯功能表的【屬性】指令,可以看到專案的屬性頁。
12-1-1 Visual Basic的專案-專案的屬性頁(屬性說明) • 【應用程式】標籤的常用屬性,如下表所示:
12-1-1 Visual Basic的專案-專案的種類 • 在VBE新增專案時提供多種專案範本,可以幫助我們快速建立所需的應用程式,如下表所示:
12-1-2 Visual Basic的方案-說明 • 如果使用VBE建立大型應用程式,除了建立Visual Basic的Windows應用程式外,我們可能需要同時建立多個類別庫,此時就需要在同一個方案建立多個專案來開發應用程式。
12-1-2 Visual Basic的方案-方案的基礎 • 方案簡單的說是專案的容器,內含一到多個專案,使用.sln和.suo儲存方案的定義。請開啟「範例程式\Ch12\Ch12-1-2」資料夾的Visual Basic專案,可以看到「方案總管」視窗,如右圖所示:
12-1-2 Visual Basic的方案-建立多專案的方案 • VBE在預設情況下,同一個方案只建立一個專案,如果需要在方案新增其他專案,如下圖所示:
12-2 模組化Visual Basic應用程式 • 12-2-1 新增表單 • 12-2-2 新增模組 • 12-2-3 模組等級的範圍 • 12-2-4 指定啟動表單或模組
12-2-1 新增表單-說明 • Visual Basic應用程式如果使用模組化程式設計,在應用程式中的表單、模組和類別等都可以視為是一個個模組。 • 到目前為止的範例程式都只有單一表單,對於複雜的應用程式,我們可以建立多個表單和新增共用程序與函數的模組。 • 事實上,大部分的應用程式都不是單一表單的應用程式,如果程式需要多個表單使用介面,大部分是指對話方塊。我們可以在Visual Basic專案加入所需表單,預設是以Form2~n.vb依序來命名。
12-2-1 新增表單-在專案加入新表單 • 在Visual Basic的專案加入新表單的方法有2種,如下所示: • 在「方案總管」視窗的專案上,執行右鍵快顯功能表的「加入/加入Windows Form」指令,就可以新增表單。 • 在開啟專案後,執行「專案/加入Windows Form」指令來新增表單,本節的範例程式是使用此方式。
12-2-1 新增表單-開啟與關閉新表單 • 如果Visual Basic專案擁有多個表單,除非將它設為啟動表單,否則Form1表單需要使用程式碼來開啟其他表單,如下所示: Dim f2 As Form2 f2 = New Form2() f2.Show() • 程式碼在宣告Form2表單物件變數f2後,使用Show()方法開啟Form2表單。關閉表單是使用Close()方法,如下所示: f2.Close()
12-2-2 新增模組-說明 • Visual Basic模組(Modules)是一種參考資料型態,在Visual Basic專案加入模組檔案,預設使用Module1~n.vb命名,通常專案中的模組是用來建立表單共享的程序與函數。 • 表單Form1.vb是類別(Class)檔案,在表單建立的程序與函數需要使用物件方法來呼叫,但是位在模組宣告的公用(Public)變數或程序與函數,就能夠使用如同Visual Basic內建函數的方式來進行呼叫。
12-2-2 新增模組-範例 01: Module Module1 02: 03: Public Function SearchText(ByVal strSource _ As String, ByVal strTarget As String, _ ByVal start As Integer) As Integer 04: Return InStr(start, strSource, strTarget) 05: End Function 06: 07: Public Function ReplaceText(ByVal strSource _ As String, ByVal strReplace As String, ByVal _ start As Integer, ByVal len As Integer) As String 08: Dim strLeft, strRight As String 09: strLeft = Mid(strSource, 1, start) 10: strRight = Mid(strSource, start + len + 1) 11: Return strLeft & strReplace & strRight 12: End Function 13: 14: End Module
12-2-3 模組等級的範圍 • 模組等級範圍可以套用在模組、類別與結構,如果在模組、類別與結構宣告變數、程序與函數,就屬於此等級的範圍。其宣告使用的存取關鍵字,如下所示: • Private:宣告成Private的變數、程序與函數,只能在該模組中的程序與函數來存取與呼叫。 • Public:如果宣告成Public的變數、程序與函數,可以在整個Visual Basic應用程式中各模組的程序與函數來存取與呼叫。
12-2-4 指定啟動表單或模組 • Visual Basic專案預設的啟動表單是Form1表單,我們可以將它指定成其他表單或擁有程序Main()主程式的模組。如下圖所示:
12-3 建立多表單的應用程式-說明 • 在Visual Basic建立多表單的Windows應用程式,其目的通常是為了建立不同的資料輸入介面。例如:建立Windows應用程式的「尋找和取代」功能,在執行後可以顯示表單或對話方塊,用來輸入搜尋和取代字串。 • 換句話說,除了第10章的預設對話方塊外,我們也可以自行建立表單作為對話方塊用途。表單或對話方塊依照資料輸入方式分為:非強制回應和強制回應表單。
12-3 建立多表單的應用程式-非強制回應表單(Modeless) • 非強制回應表單開啟的表單是一個獨立表單,使用者可以在各表單間移動焦點,其地位是相等的。通常在應用程式的工具視窗,就屬於這種表單,使用者可以自行決定執行哪一個表單的功能。 • 當在Visual Basic專案加入表單後,表單是使用Show()方法來開啟,如下所示: f2 = New Form2() f2.Show() • 上述程式碼在建立表單Form2物件後,使用Show()方法開啟非強制回應表單Form2。
12-3 建立多表單的應用程式-強制回應表單(Modal) • 強制回應表單就是對話方塊,在開啟表單或對話方塊後,使用者需要輸入資料和關閉視窗後,才能繼續執行應用程式。例如:MsgBox()函數的Windows訊息視窗,就屬於這種表單。 • 在Visual Basic專案加入表單後,表單是使用ShowDialog()方法開啟表單,如下所示: f3 = New Form3() f3.ShowDialog() ' 開啟對話方塊 If f3.DialogResult = DialogResult.OK Then …… End If
12-4 建立多文件介面的應用程式-說明 • 「多文件介面」(Multiple-document Interface)不同於上一節的多表單應用程式,它是在父MDI表單,可以同時開啟多個子MDI表單,如下圖所示:
12-4 建立多文件介面的應用程式-建立父MDI表單 • 父MDI表單是子MDI表單的容器表單,只需將表單Form1的【IsMDIContainer】屬性設為【True】,就可以將表單Form1建立成父MDI表單。
12-4 建立多文件介面的應用程式-建立與開啟子MDI表單 • 子MDI表單是在父MDI表單中顯示的表單,在父表單需要使用程式碼來開啟子MDI表單,使用的是Show()方法,如下所示: Dim fc As Form2 = New Form2() fc.MdiParent = Me fc.Show()
12-4 建立多文件介面的應用程式-取得擁有焦點的子MDI表單物件 • 在同時開啟的多個子MDI表單中,只能有一個表單是作用中的表單,即取得焦點。 • 在父MDI表單物件可以使用ActiveMdiChild屬性來取得是哪一個表單物件,如下所示: Dim active As Form2 = Me.ActiveMdiChild If (Not active Is Nothing) Then ……….. End If
12-4 建立多文件介面的應用程式-子MDI表單取得父MDI表單物件 • 反過來看,對於作用中的子MDI表單,如果需要呼叫父MDI表單的方法,我們可以使用子MDI表單的MdiParent屬性取得父MDI表單,如下所示: Dim parent As Form1 = Me.MdiParent parent.Search(txtSearch.Text) • 上述程式碼取得父MDI表單Form1後,呼叫Search()方法。
12-4 建立多文件介面的應用程式-排列子MDI表單 • 在父MDI表單可能開啟多個子MDI表單,此時在父MDI表單的功能表可以新增選項,以便切換不同子表單的排列方式,如下所示: Me.LayoutMdi(MdiLayout.Cascade) • 上述程式碼使用LayoutMdi()方法排列子表單,其參數是排列方式的MdiLayout列舉常數。
12-4 建立多文件介面的應用程式-MdiLayout列舉常數 • MdiLayout列舉常數,如下表所示:
12-4 建立多文件介面的應用程式-貼上剪貼簿 • 剪貼簿功能可以將子MDI表單的文字方塊內容剪下,然後貼到其他子MDI表單上。Visual Basic剪貼簿處理是Clipboard類別,可以使用SetDataObject()方法存入剪貼簿,如下所示: Clipboard.SetDataObject( _ active.txtInput.SelectedText) • 上述程式碼將文字方塊選取的文字內容貼上剪貼簿。
12-4 建立多文件介面的應用程式-貼上剪貼簿 • 至於取出剪貼簿內容物件是使用GetDataObject()方法,如下所示: Dim ido As IDataObject = Clipboard.GetDataObject() • 程式碼取出剪貼簿內容的IDataObject物件後,我們可以使用If條件檢查物件內容的資料格式,如下所示: If ido.GetDataPresent(DataFormats.Text) Then active.txtInput.SelectedText = _ ido.GetData(DataFormats.Text).ToString() End If
12-5 執行外部應用程式-說明 • Windows作業系統是一種多工的作業系統,可以同時執行多個應用程式,例如:同時執行瀏覽程式Internet Explorer瀏覽網頁或Outlook Express收發電子郵件。 • 同樣的,使用Visual Basic建立的應用程式,如果需要,可以在Visual Basic應用程式呼叫其他應用程式,以便同時執行相關工具程式,例如:記事本或小畫家。
12-5 執行外部應用程式-Shell()函數 • 在Visual Basic程式執行外部應用程式的函數是Shell()函數,如下所示: progID = Shell( _ "C:\Windows\System32\notepad.exe", _ AppWinStyle.NormalFocus) • 上述Shell()函數的第1個參數是應用程式的完整路徑字串,可以省略執行檔的附檔名.exe,第2個參數是開啟應用程式視窗的樣式,這是AppWinStyle列舉常數。
12-5 執行外部應用程式- AppWinStyle列舉常數 • AppWinStyle列舉常數,如下表所示: