close

二、多表單專案的設計方法

 

一個Windows Form應用程式剛被新增時,預設上一個專案只擁有一個表單。欲在此專案中增加表單,可在C#編輯器右上方的方案總管,即是:

image

在專案名稱(即上圖的WindosFormApplication1)上按右鍵,然後選擇「加入」àWindows Form,如下圖:

image

再取選 image ,按下 image就可以為此專案新增一個表單。新增的表單會在方案總管中出現,如:

image

其中,Form1Form2就是專案中現有的兩個表單之名稱。在C#中,cs類別檔的副檔名,而Form1Form2也被當成兩個不同的類別。程式設計者可在方案總管中將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) 共用類別共享靜態成員法:

※ 步驟一:建立一個此專案的共用類別:

在方案總管中,於當前專案名稱上按右鍵(如同加入新表單時的步驟),按「加入」à類別,如下圖:

image

再取選 image ,按下 image

就可以在此專案中加入新的類別。

※ 步驟二:建立好的類別,預設名稱為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 初始表單類別();

例如(假設專案中有三個表單類別,分別是Form1Form2Form3)

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成員才行)

 

 

 

 

上一篇:表單應用程式

下一篇:多表單專案

按此前往C#完整教學目錄

 

 

上一篇:表單

下一篇:button radiobutton checkbox NumericUpDown

按此前往C#完整教學目錄

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()