2013年12月25日 星期三

C# 善用groupBox對控制項的特性

// 使用一個 GroupBox,並在 GroupBox 中放入數個 TextBox, CheckBox, Button 等
// 利用 GroupBox.Controls 去修改 GroupBox 中 TextBox, CheckBox, Button 等控制項的屬性
 
private void Form3_Load(object sender, EventArgs e)
{
    // foreach  是用來顯示整數陣列的內容。
    //對於在陣列或物件集合中實作 System.Collections.IEnumerable System.Collections.Generic.IEnumerable<T> 介面的每個項目,foreach 陳述式會重複內嵌陳述式群組。foreach 陳述式是用來逐一查看集合,以取得所需的資訊,但是不能用來加入或移除來源集合的項目,以避免無法預期的副作用。如果您必須加入或移除來源集合的項目,請使用 for 迴圈。


    // 取得 groupBox1 中所有的控制項,用 foreach 逐一讀取。
    // 可以針對 groupBox1 內的所有控制項做修改。
    foreach (Control ctl in groupBox1.Controls)
    {

        if (ctl is CheckBox) // 判斷為 CheckBox 時,將 CheckBox.Checked 設為 True
            ((CheckBox)ctl).Checked = true;
        else if (ctl is TextBox) // 判斷為 TextBox 時,將 CheckBox.Text 設為 "Hello world!"
            ((TextBox)ctl).Text = "";
        else if (ctl is Button) // 判斷為 Button 時,將 Button.Text 設為 "OK"。並建立 Click 事件。
        {
            ((Button)ctl).Text = "OK";
            ((Button)ctl).Click += new EventHandler(Form3_Click);
        }
           
    }

}

void Form3_Click(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}

C# 動態建立事件、刪除事件




public Form1()
{
    InitializeComponent();
}

// 動態建立事件及刪除事件。
// 建立三個 Button,分別取名 btnAdd, btnDel, btnShow
// 按下 btnAdd 可動態建立事件。
// 按下 btnDel 可動態刪除事件。
// 在事件建立後,按下 btnShow 會秀出 "Hello world!"
// btnAdd 按幾次,就會建立相應次數的 btnShow_Click 事件。
//
private void btnAdd_Click(object sender, EventArgs e)
{
    // 動態建立事件。
    // 輸入到 += 時,可以按兩下 Tab鍵 會自動建立 btnShow_Click 事件。
    btnShow.Click += new EventHandler(btnShow_Click); 


    // Visual Studio 2005 才有 EventHandler(btnShow_Click)
    // Visual Studio 2005 只剩下 btnShow_Click
}

void btnShow_Click(object sender, EventArgs e)
{
    MessageBox.Show("Hello world!");
}

private void btnDel_Click(object sender, EventArgs e)
{
    // 動態刪除事件。
    btnShow.Click -= new EventHandler(btnShow_Click);
}

C# 動態建立事件




筆記:C# 動態建立事件。
1.建立一個 Window 應用程式。
2.拉一個 groupBox ,並且放入幾個 TextBox 及 ComboBox 排成一直行。
3.接下來完成下面的 code ,就可以用上下鍵在各個 TextBox 間移動。


        private void Form1_Load(object sender, EventArgs e)
        {
            // 跑回圈。
            // groupBox1.Controls Controls 代表 groupBox 中所有物件。
            foreach (Control ctl in groupBox1.Controls)
            {
                // 針對不同的物件,各自動態建立事件。
                if (ctl is TextBox)
                {
                    // Form Load 時動態建立 txt_KeyDown 事件。
                    //        打到 += 之後(↓這裡),按下 Tab鍵,便會自動產生事件。
                    ((TextBox)ctl).KeyDown += new KeyEventHandler(txt_KeyDown);
                    // Form Load 時動態建立 txt_GotFocus 事件。
                    ((TextBox)ctl).GotFocus += new EventHandler(txt_GotFocus); 
                }
                else if (ctl is ComboBox)
                {
                    // Form Load 時動態建立 txt_KeyDown 事件。
                    ((ComboBox)ctl).KeyDown += new KeyEventHandler(txt_KeyDown);
                    // Form Load 時動態建立 txt_GotFocus 事件。
                    ((ComboBox)ctl).GotFocus += new EventHandler(txt_GotFocus);

                }

            }
        }

        void txt_GotFocus(object sender, EventArgs e)
        {
            // 宣告 txt,將 sender 轉型成 TextBox 後,用 txt 承接
            // 這種轉型的方法,看很多次,還是不懂啊....
            TextBox txt = (TextBox)sender;
            txt.SelectAll();
        }

        private void txt_KeyDown(object sender, KeyEventArgs e)
        {
            // C# select case
            switch (e.KeyCode)
            {

                case Keys.Down:
                case Keys.Return:
                    // 送出 Tab 鍵的訊號
                    SendKeys.Send("{Tab}");
                    break;
                case Keys.Up:
                    // 送出 Shift + Tab 鍵的訊號
                    // +」號代表 Shift
                    SendKeys.Send("+{Tab}");
                    break;
                default:
                    break;
            }
        }