C# 入門指南 - 事件

程式 (program) 對使用者操作 GUI 元件都應該有相對的反應,這要先設定元件的屬性 (property) 並且連結處理事件 (event) 的方法 (method)




例如使用者按下 Button 後,在命令列印出 "button click" 的訊息,這時候就要設定 Button 的 Click 屬性,替 Click 增加一個 EventHandler 物件 (object) ,並且另外設計 button_Click() 方法進行印出訊息的工作
this.button1.Click += new EventHandler(this.button_Click);


button_Click() 如下
private void button_Click(object sender, EventArgs e) {
    Console.WriteLine("button click");
}


同樣的,使用者在 TextBox 輸入文字(按下按鍵),我們希望在命令列印出訊息,這裡需要在 TextBox 的 KeyPress 屬性新增 KeyPressEventHandler 物件
this.textbox1.KeyPress += new KeyPressEventHandler(this.textbox_KeyPress);


textbox_KeyPress() 如下
private void textbox_KeyPress(object sender, EventArgs e) {
    Console.WriteLine("key press");
}


ListBox 則是在命令列印出使用者選擇的選項,這跟 Button 一樣設定 Click 屬性即可
this.listbox1.Click += new EventHandler(this.listbox_Click);


listbox_Click() 如下
private void listbox_Click(object sender, EventArgs e) {
    Console.WriteLine(this.listbox1.SelectedItem);
}


ListBox 的 SelectedItem 屬性就是被選取選項的文字標籤。


完整的 guidemo.cs 修改如下
using System;
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.button1.Location = new Point(10, 10);
        this.button1.Text = "Click Me!!";
        this.button1.Click += new EventHandler(this.button_Click);
        
        this.textbox1 = new TextBox();
        this.textbox1.Location = new Point(10, 45);
        this.textbox1.Text = "Input Something.....";
        this.textbox1.KeyPress += new KeyPressEventHandler(this.textbox_KeyPress);
                
        this.listbox1 = new ListBox();
        this.listbox1.Location = new Point(10, 80);
        this.listbox1.Items.Add("Choice 1");
        this.listbox1.Items.Add("Choice 2");
        this.listbox1.Items.Add("Choice 3");
        this.listbox1.Items.Add("Choice 4");
        this.listbox1.Click += new EventHandler(this.listbox_Click);
        
        this.Controls.Add(button1);
        this.Controls.Add(textbox1);
        this.Controls.Add(listbox1);
    }
    
    private void button_Click(object sender, EventArgs e) {
        Console.WriteLine("button click");
    }
    
    private void textbox_KeyPress(object sender, EventArgs e) {
        Console.WriteLine("key press");
    }
    
    private void listbox_Click(object sender, EventArgs e) {
        Console.WriteLine(this.listbox1.SelectedItem);
    }

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

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


編譯執行,結果如下



好了, GUI 的基本概念大體如此,接下來我們要來實際建置 EncryptGUI 囉!


中英文術語對照
程式program
屬性property
事件event
方法method
物件object


您可以繼續參考
GUI 篇


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


參考資料
http://msdn.microsoft.com/zh-tw/library/awbftdfh%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms366768%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/w369ty8x%28v=vs.80%29.aspx

沒有留言: