2012-01-18 17 views
1

我有幾個文本框只需要輸入數字。問題是我必須複製&將下面的代碼粘貼到另一個僅允許數字值的TextBox。有沒有更簡單的方法來實現?如使用函數或繼承?如何更好地使用KeyDown事件驗證?

private void txtCheckVoucher_Amount_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (Control.ModifierKeys == Keys.Shift) 
    { 
      e.SuppressKeyPress = true; 
      return; 
    } 

    if (((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || 
      (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) || 
       e.KeyCode == Keys.Decimal || e.KeyCode == Keys.OemPeriod || 
       e.KeyCode == Keys.Back || e.KeyCode == Keys.Tab || 
       e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || 
       e.KeyCode == Keys.End || e.KeyCode == Keys.Home || 
       e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Delete)) 
    { 

    } 
    else if (e.KeyCode >= Keys.A || e.KeyCode <= Keys.Z) 
       e.SuppressKeyPress = true; 
} 
+0

在我看來,大案(從D0開始,以Delete結尾)可以完全消除。你沒有做任何事情,下面的塊(檢查A-Z範圍)不需要其他的東西 - 我的意思是A和Z之間的任何東西都不能滿足大案例中的條件。 – 2012-01-18 05:47:25

回答

0

如果文本框需要相同的KeyDown事件邏輯,爲什麼不直接訂閱兩個文本框到相同的事件處理程序呢?

您可以將KeyDown事件設置爲相同的txtCheckVoucher_Amount_KeyDown()方法。

+0

謝謝。這是我需要的。 – 2012-01-19 03:10:50

3

您可以通過三種方式

  1. 你可以有共同的功能,這將檢查輸入的密鑰是否有效做到這一點。你可以從所有按鍵事件處理程序中調用該函數。如果你在不同的表單上有文本框,這很適合。
  2. 如果所有的文本框都是相同的形式,在這種情況下,將所有按鍵事件處理程序綁定到相同的函數。
  3. 您可以讓您的自定義文本框控件只接受必需的鍵。檢查this後,它可能會幫助你。

在一般情況下,你可以通過((System.Windows.Forms.Control)(sender)).Name

希望這有助於獲取TextBox控件ID /名稱。

+0

非常感謝。 – 2012-01-19 03:10:58

0

簡單分配相同的keydown事件txtCheckVoucher_Amount_KeyDown()所有文本框

1

您可以從所有其他文本框KeyDown事件調用txtCheckVoucher_Amount_KeyDown()。