二、多表單專案的設計方法
一個Windows Form應用程式剛被新增時,預設上一個專案只擁有一個表單。欲在此專案中增加表單,可在C#編輯器右上方的方案總管,即是:
在專案名稱(即上圖的WindosFormApplication1)上按右鍵,然後選擇「加入」àWindows Form,如下圖:
再取選 ,按下 就可以為此專案新增一個表單。新增的表單會在方案總管中出現,如:
其中,Form1和Form2就是專案中現有的兩個表單之名稱。在C#中,cs是「類別檔」的副檔名,而Form1和Form2也被當成兩個不同的類別。程式設計者可在方案總管中將cs檔改名,如Form1.cs改成myform.cs,改完後編輯器會詢問使用者,是否須將所有有關Form1的程式碼都改成myform。不改亦無妨,只是習慣上會改,以方便辨識。
(1) 設定程式執行時所顯示的表單:
在方案總管中開啟Program.cs檔,在其中的Main()函式中,寫下:
Application.Run(new 表單類別名稱());
即可設定該表單為程式執行時所顯示的表單(稱之為「初始表單」)。該行程式碼預設寫為:
Application.Run(new Form1());
(2) 有一個觀念很重要:使用者所使用的表單,是「表單類別物件」而不是「表單類別」。有了表單類別之後,還要宣告表單類別物件。宣告方法而一般的類別是一樣的,即是:
表單類別名稱 表單名稱 = new 表單類別名稱()
如在Program.cs檔、其中的Main()函式中的Application.Run(new Form1());,即是建立了一個Form1類別物件,讓程式在執行時開啟這個表單類別物件。
(3) 表單的資料傳遞(表單傳值):
所謂表單傳值,就是將某表單A的某成員傳值入另一個表單B的某成員。實際應用上,譬如像是在某表單A的控制項中輸入資訊,而將這個輸入資訊在另一個表單B的控制項中顯示。要達到這個目的,須有以下先決條件:
※ 在一表單中要可以呼叫其他表單的類別物件。
※ 在一表單中要可以呼叫其他表單類別物件的控制項。一表單所有的控制項,事實上也是該表單類別物件的成員,就算程式設計者是從工具箱中將之拖曳入表單的,C#也會在該表單類別中自動宣告這些控制項成員。譬如,從工具箱中拖曳一個TextBox控制項給Form1表單,則在Form1.Designer.cs這個檔案中,就會為Form1類別多建立一個TextBox成員,即是:
private System.Windows.Forms.TextBox textBox1;
這行程式碼,是在TextBox控制項被拖曳至表單時自動由C#建立的。
要注意的是,此成員控制項預設是private,即是不能讓其他表單類別存取。將private改成public,此成員控制項便可被其他表單存取。
表單傳值的方法有許多種,以下只介紹常用者:
(3-1) 共用類別共享靜態成員法:
※ 步驟一:建立一個此專案的共用類別:
在方案總管中,於當前專案名稱上按右鍵(如同加入新表單時的步驟),按「加入」à類別,如下圖:
再取選 ,按下
就可以在此專案中加入新的類別。
※ 步驟二:建立好的類別,預設名稱為Class1(若不滿意這個名稱,可自行更改)。其程式碼在Class1.cs這個檔案中,在方案總管中可找到這個檔案。這個Class1類別可供所有在該專案中的檔案存取。
※ 步驟三:Class1的程式碼,預設為:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
class Class1
{
}
}
以下區塊就是定義Class1類別的成員與成員函式之處:
class Class1
{
}
在 { 與 } 之間,為專案中所有的表單類別,都宣告一個靜態表單成員,方法為:
public static 初始表單類別 表單類別物件名稱 = new 初始表單類別();
例如(假設專案中有三個表單類別,分別是Form1、Form2、Form3):
public static Form1 f1 = new Form1();
public static Form2 f2 = new Form2();
public static Form3 f3 = new Form3();
※ 步驟四:
在Form1.cs中將Class1類別的f1成員設定為Form1本身。如:
Class1.f1=this;
在Form2.cs中將Class1類別的f2成員設定為Form2本身。如:
Class1.f2=this;
在Form3.cs中將Class1類別的f3成員設定為Form3本身。如:
Class1.f3=this;
如此一來,此專案中每個表單都可藉由宣告Class1類別物件來讀取其他表單以及其他表單的控制項(控制項必須是public成員才行)。
留言列表