0

SelectionStart每当TextBox 控件的 SelectedText 或属性发生更改时,我都想引发一个事件。有没有不涉及从头开始编写自定义 TextBox 控件的简单方法?

显然,一种选择是让计时器检查这些属性的更改,但我宁愿不使用任何计时器。

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

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

4

1 回答 1

0

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

请注意,MouseDownandMouseUp事件以及SelectionStartandSelectionLength属性在 中是公共的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);
    }
}
于 2013-02-15T14:07:32.900 回答