de mo- dataso urce 與 dropd ownli st ch06. windows 程式設計基本概念 mdi 表單的使用...

32
CH06 CH06

Post on 21-Dec-2015

250 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

CH06CH06

Page 2: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 表單的使用

一般而言我們也會將選單和工具列放置於主視窗上。 主視窗裡面同時可以有多份文件。

看起來像是另一個小桌面,桌面上有多份文件,而文件彼此之間互不干擾,使用者可以在多份文件當中切換,以利編輯或參考。

一般來說,子視窗不會有選單、工具列、狀態列等功能。

主視窗上可以有狀態列。

典型的 MDI 範例 - Excel Sheet

Page 3: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 表單的使用

文件 Book1 是一個表單 ( 一般稱之為 MdiChild)

文件 Book2 也是一個表單 ( 一般稱之為 MdiChild)

主視窗也是一個表單( 一般稱之為 MdiParent)

Page 4: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 表單的使用

表單外觀已經變成像是容器的樣式

這個屬性可以將一般表單變為 MdiParent

要設計出這樣的應用程式,您只需要把主要表單的 isMdiContaine

r 屬性設為 True 即可

Page 5: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 子表單的建立

當表單都建立好之後,我們只需要將一般表單的 MdiParent屬性,設為主表單,就可以讓一般表單化身為 MdiChild 表單,顯示在主視窗 (MdiParent 表單 ) 中:

一般表單名稱 .MdiParent = Mdi父視窗 (主表單 )名稱

依照一般的方式建立兩個新表單

這則是兩個一般的表單

這是將 isMdiContainer 屬性設為 True 的主表單

Page 6: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 子表單的建立EX: CH06-01\Main.vb

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim MyChild1 As New Child1 Dim MyChild2 As New Child2

'顯示第一個MDI子表單 MyChild1.MdiParent = Me MyChild1.Show() '顯示第二個MDI子表單 MyChild2.MdiParent = Me MyChild2.Show() End Sub

這邊的 Me ,指的是主表單 Main 。只要在顯示表單時,將表單的 MdiParent屬性設為 MdiParent 表單,即可以 MDI方式呈現。

Page 7: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念MDI 子表單的建立

執行結果 :MDI 子表單

Page 8: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念表單的 Owner屬性

執行結果 :MDI 子表單

Word 畫面之中,『尋找及替代』功能視窗顯示出來之後,在尚未關閉該視窗的狀況底下,即使切換主視窗,『尋找及替代』視窗依舊會疊在 Word 主視窗之上…

但是這個特性又與『最上層顯示的表單』稍微有所不同,最上層表單的功能是在顯示的時候一律會蓋過其他表單,但是 Owner表單則是只會蓋過其『擁有者』。

Page 9: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念表單的 Owner屬性

其設定的方法是:EX: CH06-02\Form1.vb

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim NewForm As New Form2 NewForm.Owner = Me NewForm.Show() End Sub 將被擁有的表

單的 Owner 屬性設為擁有者

Page 10: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念表單的 Owner屬性

您會發現即使 form1 是 Active 表單,但是 Form2 仍然會疊在 Form1 之上。

Page 11: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念表單間的資料交換

方式一:EX: CH06-03\Module1.vb

Public Module Module1 '模組內的 Public成員,具有與整個程式相同的生命週期以及最大的存取範圍 Public GlobalVariable As StringEnd Module

模組內的 Public 成員,具有與整個程式相同的生命週期以及最大的存取範圍,意即,在程式的任何地方都可以存取到此成員。

因此我們可以用它來在表單之間交換資訊…

方式二:

您也可以透過 My 類別中的 My.Application.OpenForms ,列舉出目前程式所有開啟的表單,並且存取與搜尋您所需要的資料。

Page 12: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念不具標題的視窗

要達到這個功能,可將表單的標題部份取消,某些需要完整掌握表單外觀樣式的程式時常會這麼做。要達成這個效果很簡單,只需要將表單的 FormBorderStyle 設為 None即可:

Page 13: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念表單按鍵事件的抓取

我們可以將表單的 KeyPreview 屬性設為 True ,這時候表單將會比控制項先一步接收到按鈕事件,因此我們撰寫程式如下:

EX: CH06-12\Form1.vb '捕捉按鍵 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Left Then Me.PictureBox1.Left -= 5 End If If e.KeyCode = Keys.Right Then Me.PictureBox1.Left += 5 End If End Sub

當鍵盤被按下時會觸發此事件,透過 e.KeyCode 回傳被按下的按鍵代碼。

Page 14: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念 突顯示選單 - ContextMenuStrip

基本功能:在程式執行後,提供突顯示選單,讓使用者能在按下滑鼠「右鍵」時,出現『突顯式』的功能選單。

使用時機:在需要讓特定控制項具有『按右鍵就跳出功能選單』時使用。

外觀:當 ContextMenuStrip 被拖曳出來後,會出現在 Component Tray ,設計階段則是出現在表單左上方 ( 讓開發人員編輯選單 ) ,執行階段則以選單的形式出現在控制項上,例如下圖是在 PictureBox 上按下滑鼠右鍵時,所跳出的突顯式選單。

Page 15: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念 主選單 - MenuStrip

基本功能:建立主功能表。

使用時機:當系統的功能繁多,需要分門別類做出整理,或是其他需要主功能表的場合。

外觀:當 MenuStrip 被拖曳出來後,會出現在 Component Tray ,但執行階段主選單則是在視窗的最上方。

Page 16: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念 工具列 - ToolStrip

基本功能:在表單上提供工具列,讓開發人員佈置按鈕或是其他項目。

使用時機:當程式中希望把功能分類,讓各項功能以圖示的方式呈現時。

外觀:當 ToolStrip 被拖曳出來後,會出現在 Component Tray ,可直接在主視窗中編輯,加入按鈕或是其他項目。

Page 17: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔

Page 18: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔EX: CH06-09\Form1.vb

'開啟檔案 Private Sub ToolStripButton1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles ToolStripButton1.Click Me.OpenFileDialog1.Filter = "文字檔案 (*.txt)|*.txt " If Me.OpenFileDialog1.ShowDialog =

Windows.Forms.DialogResult.OK Then Dim filename As String = Me.OpenFileDialog1.FileName '將指定的檔案載入 TextBox Me.TextBox1.Text =

My.Computer.FileSystem.ReadAllText(filename) End If End Sub

開檔視窗

Page 19: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔

Page 20: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔EX: CH06-12\Form1.vb

'儲存檔案 Private Sub ToolStripButton2_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles ToolStripButton2.Click Me.SaveFileDialog1.Filter = "文字檔案 (*.txt)|*.txt" If Me.SaveFileDialog1.ShowDialog =

Windows.Forms.DialogResult.OK Then Dim filename As String = Me.OpenFileDialog1.FileName '將 TextBox的內容寫入指定的檔案 My.Computer.FileSystem.WriteAllText(filename,

Me.TextBox1.Text, False) End If End Sub

存檔視窗

Page 21: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔

Page 22: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 開檔與關檔

請注意,這些對話視窗並不會真的幫你完成開檔與存檔功能,而是幫助開發人員可以省去製作這些統一的使用者介面 ( 表單 ) 的時間。

例如,開檔與另存新檔對話視窗會跳出畫面讓使用者選擇或設定要儲存的檔案位置,但是只負責到傳回檔名為止,後續的存檔或是開檔工作則是程式設計師要負責完成。

Page 23: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 文字樣式選擇

您也可以透過工具箱拖曳出的 FontDialog 控制項,提供使用者選取文字字型的功能:呼叫程式碼

Me.FontDialog1.ShowDialog()

透過 FontDialog1 的 Font 屬性,則可以取回使用者選取的文字樣式。

Page 24: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念對話視窗 – 顏色選擇

您也可以從工具箱中拖曳 ColorDialog 到表單上,這個控制項可以提供使用者色彩選擇對話視窗,該控制項的操作方式如下: 呼叫程式碼

Me.ColorDialog1.ShowDialog()

使用者選擇的顏色,會透過 ColorDialog1 的 Color 屬性傳回。

Page 25: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念ErrorProvider 控制項基本功能:提供自訂的錯誤訊息。使用時機:您可以利用 ErrorProvider判斷或驗證使用者在特定欄位上所輸入的值,有沒有符合規範。外觀:當 ErrorProvider 被拖曳出來後,會出現在 Component Tray 。但是當執行階段,則會出現在表單的畫面上,提示使用者警示訊息:

Page 26: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念ErrorProvider 控制項

Page 27: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念ErrorProvider 控制項

我們利用 TextBox 來引發錯誤訊息,另外請注意 Button 控制項,其 CausesValidation 屬性為 True(預設 ) ,表示按下之後也會觸發『 Validating 』事件,因此 TextBox 的『錯誤驗證事件』會隨著 Button 被按下而觸發:

Page 28: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念ErrorProvider 控制項

此外,要注意驗證的程式碼是寫在「 TextBox1_Validating」底下,您會發現,不管是 TextBox 文字的改變,或是按下 Button ,都會觸發驗證錯誤事件,而我們在此事件當中所撰寫的程式碼,就負責控制 ErrorProvider的顯示:EX: CH06-11\Form1.vb

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

'如果 TextBox1.Text是空的,就出現錯誤訊息 If TextBox1.Text = "" Then ErrorProvider1.SetError(TextBox1, "不可以是空值 ") Else '如果 TextBox1.Text不是空值就清除錯誤 ErrorProvider1.SetError(TextBox1, "") End If End Sub

Page 29: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念ErrorProvider 控制項EX: CH06-11\Form1.vb

Private Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating

'如果 TextBox2.Text不是數字是空的,就出現錯誤訊息 If Not IsNumeric(TextBox2.Text) Then ErrorProvider1.SetError(TextBox2, "必需是數字 ") Else ErrorProvider1.SetError(TextBox2, "") End If End Sub

Page 30: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念Timer控制項基本功能:此控制項提供每隔 N秒自動觸發某事件的功能。使用時機:在程式當中想要監控某個狀態,或是定時進行一些動作時。外觀:當 Timer 被拖曳出來後,會出現在 Component Tray ,使用時表單上也不會出現任何控制項。

Page 31: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念Timer控制項

此控制項的重要成員如下:屬性名稱 值的型別 &範圍 值 說明Enabled Boolean 預設為 False 是否啟動 Timer。

Interval Integer 預設為 100計算時間的單位(毫秒)。當 Interval=1000,時間移動的單位為 1秒。

事件名稱 說明Timer1_Tick 當 Timer啟動時,要執行的事件程式碼,就撰寫在這個地方。

Page 32: De mo- dataSo urce 與 DropD ownLi st CH06. Windows 程式設計基本概念 MDI 表單的使用 一般而言我們也會 將選單和工具列放 置於主視窗上。 主視窗裡面同時可以有多份文件。

WindowsWindows 程式設計基本概念程式設計基本概念Timer控制項

當您拖曳 Timer 控制項到頁面上之後,可以 Double-Click 該圖示,並撰寫底下事件程式碼:EX:電子鐘範例

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Me.Label1.Text = Now.ToString("HH:mm:ss ") & Now.Millisecond End Sub

由於我們將 Timer1 的 Enabled 屬性設為 True ,因此當程式一開始執行之後,就出現了電子鐘: