2012年10月28日 星期日

計算機程式數字鍵盤設計(C#)

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變數後一格。如此一來就可以達到數字鍵盤或者英文字母鍵盤了。


在這提供給大家一個不一樣的選擇,下回見。

沒有留言:

張貼留言