C# 入門指南 - GUI 的基本概念

C# 中建立 GUI 是利用 System.Windows.Forms 裡的 Form 類別 (class) ,然後在 Form 中加入需要的視窗元件




習慣上是設計繼承 (inherit) 自 Form 的類別,然後將需要的視窗元件設定為屬性 (property) ,接著在建構子 (constructor) 中用 new 實際建立每個視窗元件物件 (object) ,依序加入 Form 內。


我們先以一個簡單的例子示範基本概念
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : Form {
    public Button button1;
    public TextBox textbox1;
    public ListBox listbox1;
        
    public Form1() {
        this.button1 = new Button();
        this.textbox1 = new TextBox();
        this.listbox1 = new ListBox();
        this.Controls.Add(button1);
        this.Controls.Add(textbox1);
        this.Controls.Add(listbox1);
    }

    [STAThread]
    static void Main() {
        Application.Run(new Form1());
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:guidemo.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


C# 繼承的寫法就是在子類別 (subclass) 名稱後接冒號,然後是父類別 (superclass) 名稱
public class Form1 : Form {


我們使用三個視窗元件,分別是按鈕 Button 、文字方塊 TextBox 、多重選項方塊 ListBox
public Button button1;
public TextBox textbox1;
public ListBox listbox1;


new 建立視窗元件後,要將視窗元件加入 Form 的 Controls 屬性中。 Controls 為 Control 型態的集合物件,專門用來存放視窗元件
this.Controls.Add(button1);
this.Controls.Add(textbox1);
this.Controls.Add(listbox1);


接下來 Main() 之前有一行
[STAThread]


這是用來標記 Form 的進入點。


Main() 裡面就是以 Application 呼叫 Run() ,並以 Form 物件當參數 (parameter)
static void Main() {
    Application.Run(new Form1());
}


編譯需要加入參數 -pkg:dotnet



執行結果如下



咦?三個元件都擠在一起,這是因為元件座標的預設值為 (0, 0) ,也就是視窗的左上角,所以三個視窗元件都是從 (0, 0) 開始顯示,導致都擠在一起。接下來我們來看看怎麼將視窗元件座標定位吧!


中英文術語對照
類別class
繼承inherit
屬性property
建構子constructor
物件object
子類別subclass
父類別superclass
參數parameter


您可以繼續參考
GUI 篇


相關目錄
回 C# 入門指南
回 C# 教材
回首頁


參考資料
http://msdn.microsoft.com/zh-tw/library/dd30h2yb.aspx
http://msdn.microsoft.com/zh-tw/library/ms229601%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms229599%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms229597%28v=vs.80%29.aspx
http://blogs.msdn.com/b/jfoscoding/archive/2005/04/07/406341.aspx
http://msdn.microsoft.com/zh-tw/library/ms182351%28v=vs.80%29.aspx

5 則留言:

Unknown 提到...

不好意思,我想請問一下
在 Windows 下不用 mono
單純靠 VC# 怎樣讓 Console 視窗不見呀
因為我是開空專案想要從頭敲起 GUI
但是背後總會出現個黑窗
我也開了視窗的專案出來比較
但實在找不出 Windows Form 的專案多了那些叫黑窗隱藏的資訊說

Kaiching Chang 提到...

使用 Visual C# 的話,請按照 Visual 軟體拉 GUI 的方式製作圖形介面會比較恰當唷!或著可在命令列用 csc 指令編譯看看,依據 C# 標準應該會得到相同的結果 :)

Unknown 提到...

抱歉,目前我是在學習期,所以我不打算拉一拉就當作學到了,當我要快速開發再去拉就好了,因為如果從拉視窗學起,會有一堆不清不楚的設定就已經生在那了,我打算釐清再WYSWYG

不過我還是想問
我用空專案 從頭敲一個 WinForm 會是用小黑窗呼叫出一個 form 視窗(兩個視窗)
可是用Windows Form 專案拉出來的卻是直接有視窗沒有 Console 介面(一個視窗)

所以我不知道差在哪裡說

(順便感謝大大一系列的教學文)



Kaiching Chang 提到...

IDE 的問題,我幫不了你唷,也不在這篇文章的討論範圍 sorry

Unknown 提到...

好吧 還是感謝大大
其實我也覺得有點超出該問的範疇
(不過我只是在懷疑是不是有個 XML 之類的設定檔可以控制 no Console ,畢竟最終是不可能帶 IDE 的專案檔給人的,那應該是某處有加一串東西這樣)