Programming/C#

RichTextBox에서 텍스트 선택 문제 해결

주나니 2009. 5. 19. 16:31

문제는 RichTextBox를 폼에 끌어다 놓고 AutoWordSelection 속성을 false로 지정 했는데도 
한글이나 MS Word 처럼 텍스트 블록 지정을 마우스로 했을 때 처럼 한글자씩 선택되도록
동작하지 않는 것이다. 구글링을 하던중 발견하였다.

public
class CustomRichTextBox : System.Windows.Forms.RichTextBox

{

    public CustomRichTextBox()

    {

        this.AutoWordSelection = false;

        this.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

    }

 

    private bool _Selecting = false;

    private int _StartPosition = 0;

 

    protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)

    {

        if (_Selecting)

        {

            int charPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y));

            int length = 0;

            if (charPosition >= _StartPosition)

            {

                length = charPosition - _StartPosition + 1;

                this.Select(_StartPosition, length);

            }

            else

            {

                length = _StartPosition - charPosition;

                this.Select(charPosition, length);

            }

        }

 

        base.OnMouseMove(e);

    }

 

    protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)

    {

        this._Selecting = true;

        _StartPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y));

        base.OnMouseDown(e);

    }

 

    protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)

    {

        this._Selecting = false;

        base.OnMouseUp(e);

    }

}

-- 출처 : http://social.msdn.microsoft.com/forums/en-US/winforms/thread/9bd9221a-df8e-4c1d-b532-b07cd0de7536/