Winforms中的自定义控件库
我想要一个只有数字作为输入的文本框。所以我在文本框的按键事件中编写了以下代码Winforms中的自定义控件库,winforms,user-interface,c#-4.0,custom-controls,Winforms,User Interface,C# 4.0,Custom Controls,我想要一个只有数字作为输入的文本框。所以我在文本框的按键事件中编写了以下代码 if(!char.IsDigit(e.KeyChar)) { e.handled = true; } 而且效果很好。但我在应用程序的许多地方通常都需要它们,因此我编写了一个部分类,其中包含以下代码: public partial class digitTextBox : TextBox { public digitTextBox() { this.KeyPress += new
if(!char.IsDigit(e.KeyChar))
{
e.handled = true;
}
而且效果很好。但我在应用程序的许多地方通常都需要它们,因此我编写了一个部分类,其中包含以下代码:
public partial class digitTextBox : TextBox
{
public digitTextBox()
{
this.KeyPress += new KeyPressEventHandler(digitTextBox_KeyPress);
}
void digitTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
}
构建我的解决方案后,我在工具箱中获得了一个控件,甚至这个控件也工作得非常好
但我有很多文本框,有一些或其他规范,比如,有些不应该接受特殊字符,有些应该接受小数,有些小数点后最多有2位……等等,我确实需要在许多应用程序中使用这种控件
因此,我想为我的自定义控件编写一个库(.dll),如果可能的话,甚至可以进行验证。老实说,我对使用图书馆不太了解。所以我用两种不同的文本框创建了一个库,并用它们创建了一个.dll文件。现在,我创建了一个不同的winform应用程序,并添加了自定义控件.dll文件的引用。但什么也没发生。
所以我只是想知道我应该采取什么样的方法来实现它。有没有更好的方法来完成这类任务。欢迎提出任何新的建议。提前感谢。尝试用鼠标右键单击工具箱并选择“选择项…”,然后从可用列表中选择控件。如果看不到它们,请单击“浏览”按钮并选择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);
}
}
我建议实现一个自定义控件,它基于正则表达式控制输入。如果控件的文本与正则表达式不匹配,我将防止控件失去焦点,而不是限制按键。背景颜色的一些变化或弹出的气球可以用来显示错误和/或输入内容的描述。我做了类似的事情,帮助我向文本框添加属性,而不是为整数和双精度创建两种不同的类型(基本上允许我的要求使用十进制) 通过创建属性,您实际上可以在设计时在Properties视图中选择文本框是integer还是double。就像在设计期间设置字体、只读等一样 这是我制作属性的代码
/// <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; }
}
//
///将文本框类型标识为整数或双精度
///
公共枚举数字ID
{
整数,
双重的
};
///
///Textbox类型属性,默认值为整数
///
私有numericID numericType=numericID.Integer;
///
///属性的Getter和setter
///
[可浏览(正确),
DisplayName(“TextBoxType”),
默认值(numericID.Integer),
Description(“指示文本框必须只接受整数还是双精度。”),
类别(“行为”)]
公共numericID NumericType
{
获取{return numericType;}
设置{numericType=value;}
}
而onKeyPress事件实际上是非常方便的。它处理所有不同类型的数字字符,您可以选择最适合您的字符。您能定义“但什么都没发生”吗?什么事没有发生?控件是否不在工具箱中,或者控件是否不像以前那样工作?控件不在工具箱中。但现在我完成了toolboxBrowsable(true)、DisplayName中的choose项…哪个名称空间??