我正在学习如何通过继承C#中的父类来实现自定义控件。
我需要覆盖用户输入文本时触发的例程。显然我可以添加一个事件来触发使用TextChanged
,但这对我来说似乎是一种脏清理方法。
我已查看覆盖Text {get;set;}
属性,但这不起作用。
帮助?
答案 0 :(得分:2)
您可以使用KeyDown
事件。请注意,用户仍然可以粘贴内容而不会引发KeyDown
事件。要捕获所有输入,您需要按照您的想法处理TextChanged
;没什么好看的。
答案 1 :(得分:0)
要考虑的一种方法是创建扩展标准TextBox
的自定义TextBox。您可以override
许多属性和方法(包括OnKeyPress
)来处理用户输入。
简单示例:
class MyTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e) {
if (e.KeyChar == '!') {
e.Handled = true;
}
base.OnKeyPress(e);
}
}
当用户输入感叹号时,此示例中的TextBox
将忽略输入。您可以像使用标准Winform TextBox
控件一样使用此TextBox。
您可以使用Visual Studio的Intellisense查看可用的override
。只需键入“覆盖”即可开始在类中创建新成员,并且将显示所有可重写的成员。
修改强> 有关示例,请参阅codeproject.com上的this article。文章中提供的控件扩展了TextBox以专门过滤掉非数字字符,但您可以轻松修改它以过滤掉需要过滤的字符。
使用自定义控件的另一个理由是:您可以跨项目重复使用它,而无需每次都重新编码。