2011-09-22 84 views
0

我想要一個只有數字作爲條目的TextBox。因此,我在文本框的KeyPress事件中編寫了以下代碼:Winforms中的自定義控件庫

if(!char.IsDigit(e.KeyChar)) 
{ 
    e.handled = true; 
} 

它運行得很好。不過,我一般需要他們在我的應用程序的許多地方,於是我就寫了一個局部類具有以下代碼:

建立自己的解決方案,我在我的工具箱得到了控制,甚至這是工作完美的罰款。

但我有很多文本框與一些或其他規範一樣,一些不應該接受特殊字符,一些應該接受小數,一些小數點後最多2位數字....等等,我確實需要這些許多應用程序中的一種控制。

所以我想寫一個庫(.dll)我的自定義控件,如果可能的話,即使有驗證。老實說,我對使用庫沒有太多的想法。所以我用兩種不同類型的文本框創建了一個庫,並創建了一個.dll文件。現在我創建了一個不同的winform應用程序,並添加了我的自定義控件.dll文件的引用。但沒有發生。 所以我只是想知道我應該怎樣實現它。有沒有更好的方法來完成這些任務。任何新的建議也是受歡迎的。提前致謝。

+0

你能定義「但沒有發生任何事情嗎?」?什麼沒有發生?控件是否在工具箱中,或者控件是否不像以前一樣工作? – LarsTech

+0

控件不在工具箱中。但現在我通過工具箱中的選擇項目 – Sandy

回答

0

嘗試用鼠標右鍵單擊工具箱並選擇「選擇項目...」,然後從可用列表中選擇您的控件。如果你沒有看到它們,那麼點擊瀏覽按鈕並選擇你的DLL。

在一個側面說明,你也許能夠通過添加屬性,你的兩個文本框結合:

public class MyTextBox : TextBox 
{ 
    public bool AllowDigitsOnly { get; set; } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
    if (this.AllowDigitsOnly) 
    { 
     if (!char.IsDigit(e.KeyChar)) 
     e.Handled = true; 
    } 
    base.OnKeyPress(e); 
    } 
} 
+0

幫了很多..感謝 – Sandy

0

我建議實施一個單獨的定製控制的基礎上,正則表達式,控制輸入。如果它的文本與正則表達式不匹配,我會阻止控件失去焦點,而不是限制按鍵。背景顏色或彈出氣球的一些變化可用於顯示錯誤和/或輸入應該是什麼的描述。

0

我做了類似的事情,幫助我的是爲我的文本框添加屬性,而不是爲整數和雙精度創建2種不同的類型(基本上允許我的需求使用小數)。

通過創建屬性,實際上可以選擇在設計時是將文本框設置爲整數還是雙倍。就像你在設計時設置的Font,ReadOnly等一樣。

這裏是我的代碼,以使性能,

 /// <summary> 
     /// Identify textbox type as integer or double 
     /// </summary> 
     public enum numericID 
     { 
      Integer, 
      Double 
     }; 

     /// <summary> 
     /// Textbox type property, default is integer 
     /// </summary> 
     private numericID numericType = numericID.Integer; 

     /// <summary> 
     /// Getter and setter for property 
     /// </summary> 
     [Browsable(true), 
     DisplayName("TextBoxType"), 
     DefaultValue(numericID.Integer), 
     Description("Indicates whether the textbox must only accept integers or doubles."), 
     Category("Behavior")] 
     public numericID NumericType 
     { 
      get { return numericType; } 
      set { numericType = value; } 
     } 

和onkeypress事件事件實際上是從msdn website很方便。它處理所有不同類型的數字字符,您可以選擇最適合您的字符。

+0

Browsable(true),DisplayName ...哪個命名空間? – Sandy

+0

using System.ComponentModel; – nbz

相關問題