0

SelectionStartTextBox コントロールの SelectedText またはプロパティが変更されるたびに、イベントを発生させたいと考えています。カスタム TextBox コントロールをゼロから作成する必要がない簡単な方法はありますか?

明らかに、1 つのオプションはタイマーでこれらのプロパティの変更をチェックすることですが、タイマーを使用しないことをお勧めします。

これまで、TextBox から継承し、SelectedText プロパティをオーバーライドするコントロールを作成しようとしましたが、失敗しました。さらに、SelectionStartオーバーライドすることはできません。

はい、RichTextBox コントロールにSelectionChangedイベントがあることは承知しています。ただし、RichTextBox ではなく、通常の TextBox が必要です。

4

1 に答える 1

0

から目標を達成する方法はわかりませんが、TextBox継承とカスタムコンポーネントを使用するソリューションのサンプルを以下に示します。SelectionChangedユーザーがマウスで新しいテキストを選択すると、イベントが発生します。

およびプロパティとともにMouseDownおよびイベントはで公開されているため、必要に応じてサブクラス化を回避できます。MouseUpSelectionStartSelectionLengthTextBox

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 に答える