POS系統設計必須採用大圖形介面設計,輸入數量也需設計數字鍵盤讓使用者輸入,因此這個需求便產生。
但我又不想要一個button一個button去寫事件,這樣太累了。
若想要數字鍵盤,甚至是英文字母鍵盤,我想要將他們的click事件寫成通用的click事件要怎麼辦到呢?請繼續看下去。
首先必須從控制項Name命名下手,將那些要寫成同一個事件的控制項命名規則一致。
我下面將採用btnKey+數字(例:數字鍵盤1的Button.Name為btnKey1),接下來在Form_Load事件上定義那幾個Button的Click事件指向自己撰寫的Click事件。
1: foreach (Control crl in this.Controls)
2: {
3: if (crl.Name.Contains("btnKey"))
4: {
5: crl.Click += new EventHandler(btnKey_Click);
6: }
7: }
原理就是搜尋頁面中的Controls,若Control.Name包含btnKey則加入自寫的Click事件─btnKey_Click。下面是btnKey_Click事件:
1: private void btnKey_Click(object sender, EventArgs e)
2: {
3: Button btn = (Button)sender;
4: int start = txtInsert.SelectionStart;
5: this.txtInsert.Text = txtInsert.Text.Insert(start, btn.Text);
6: txtInsert.SelectionStart = start + 1;
7: txtInsert.Focus();
8: }
這裡面也有些需的技巧,此範例中接受輸入的文字方塊Textbox名稱為txtInsert。
因為文字方塊會有游標焦點位置,總不可能預設都判斷游標焦點位置在最後方,而直接寫txtInsert.Text += btn.Text吧。
因此需要動一點手腳,我將目前游標焦點位置用SelectionStart存至start變數,利用Textbox.Text.Insert的方式於指定位置內加入字串,最後將游標焦點位置調為start變數後一格。如此一來就可以達到數字鍵盤或者英文字母鍵盤了。
在這提供給大家一個不一樣的選擇,下回見。
沒有留言:
張貼留言