更改WinForm usercontrol属性的创建事件

时间:2013-02-12 10:28:43

标签: c# .net winforms events textbox

每当TextBox控件的SelectedText或SelectionStart属性发生更改时,我想引发一个事件。是否有任何简单的方法可以从头开始编写自定义TextBox控件?

显然,一个选项是让计时器检查这些属性是否有变化,但我不想使用任何计时器。

到目前为止,我已经尝试创建一个继承自TextBox并覆盖SelectedText属性的控件,但是失败了。另外,SelectionStart无法被覆盖。

是的,我知道RichTextBox控件有SelectionChanged事件。我需要一个普通的TextBox,但不是RichTextBox。

1 个答案:

答案 0 :(得分:0)

我不知道如何从TextBox实现您的目标,但下面是使用继承和自定义组件的解决方案示例。用户通过鼠标选择一些新文本后,将引发SelectionChanged事件。

请注意,MouseDownMouseUp个事件以及SelectionStartSelectionLength属性在TextBox中是公开的,因此您可以根据需要避免子类化。

class CustomTextBox : TextBox
{
    public event EventHandler SelectionChanged;

    private int _selectionStart;
    private int _selectionLength;

    protected override void OnMouseDown(MouseEventArgs e)
    {
        _selectionStart = SelectionStart;
        _selectionLength = SelectionLength;

        base.OnMouseDown(e);
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        if (null != SelectionChanged && (_selectionStart != SelectionStart || _selectionLength != SelectionLength))
            SelectionChanged(this, EventArgs.Empty);

        base.OnMouseUp(e);
    }
}