当用户将信息输入文本框时,用什么方法设置文本框的文本?

时间:2011-11-16 21:16:16

标签: c# winforms user-controls textbox

我正在学习如何通过继承C#中的父类来实现自定义控件。

我需要覆盖用户输入文本时触发的例程。显然我可以添加一个事件来触发使用TextChanged,但这对我来说似乎是一种脏清理方法。

我已查看覆盖Text {get;set;}属性,但这不起作用。

帮助?

2 个答案:

答案 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以专门过滤掉非数字字符,但您可以轻松修改它以过滤掉需要过滤的字符。

使用自定义控件的另一个理由是:您可以跨项目重复使用它,而无需每次都重新编码。