每当TextBox控件的SelectedText或SelectionStart
属性发生更改时,我想引发一个事件。是否有任何简单的方法可以从头开始编写自定义TextBox控件?
显然,一个选项是让计时器检查这些属性是否有变化,但我不想使用任何计时器。
到目前为止,我已经尝试创建一个继承自TextBox并覆盖SelectedText属性的控件,但是失败了。另外,SelectionStart
无法被覆盖。
是的,我知道RichTextBox控件有SelectionChanged
事件。我需要一个普通的TextBox,但不是RichTextBox。
答案 0 :(得分:0)
我不知道如何从TextBox
实现您的目标,但下面是使用继承和自定义组件的解决方案示例。用户通过鼠标选择一些新文本后,将引发SelectionChanged
事件。
请注意,MouseDown
和MouseUp
个事件以及SelectionStart
和SelectionLength
属性在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);
}
}