RichTextBox и позиция каретки - PullRequest
2 голосов
/ 26 ноября 2011

Я не могу найти способ определить положение каретки в RTB, пока я выбираю текст. SelectionStart не вариант .

Я хочу определить направление выделения назад или вперед. Я пытаюсь добиться этого в SelectionChanged event . Любые советы будут оценены.

EDIT:

Я решил это, зарегистрировав направление движения мыши (ось X) с помощью событий mouseDown и mouseUp.

Код:

bool IsMouseButtonPushed = false;
int selectionXPosition = 0, sDirection=0;

private void richTextBox_SelectionChanged(object sender, EventArgs e)
{
    if (sDirection==2)//forward
    {
        //dosomething
    }
}

private void richTextBox_MouseMove(object sender, MouseEventArgs e)
{
    if (IsMouseButtonPushed && (selectionXPosition - e.X) > 0)//backward
    {
        sDirection = 1;
    }
    else if (IsMouseButtonPushed && (selectionXPosition - e.X) < 0)//forward
    {
        sDirection = 2;
    }
}

private void richTextBox_MouseDown(object sender, MouseEventArgs e)
{
    IsMouseButtonPushed = true;
    selectionXPosition = e.X;
}

private void richTextBox_MouseUp(object sender, MouseEventArgs e)
{
    IsMouseButtonPushed = false;
}

Какие еще способы это сделать?

1 Ответ

0 голосов
/ 26 ноября 2011

Свойства SelectionStart и SelectionLength изменяются при выборе левой стороны, а SelectionLength изменяется при выборе правой стороны.

Простое решение:

int tempStart;
int tempLength;

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
    if (richTextBox1.SelectionType != RichTextBoxSelectionTypes.Empty)
    {
        if (richTextBox1.SelectionStart != tempStart)
            lblSelectionDesc.Text = "Left" + "\n";
        else if( richTextBox1.SelectionLength != tempLength)
            lblSelectionDesc.Text = "Right" + "\n";
    }
    else
    {
        lblSelectionDesc.Text = "Empty" + "\n";
    }

    tempStart = richTextBox1.SelectionStart;
    tempLength = richTextBox1.SelectionLength;

    lblSelectionDesc.Text += "Start: " + richTextBox1.SelectionStart.ToString() + "\n";
    lblSelectionDesc.Text += "Length: " + richTextBox1.SelectionLength.ToString() + "\n";
}

Элементы управления:

RitchTextBox + 2xLabels

enter image description here

  1. Я не уверен, почему, но даже после отключения AutoWordSelection моя мышь выделяет целые слова.К сожалению, для моего решения это приводит к изменению направления выбора.
  2. Возможно, для этого вы можете использовать события изменения свойства.
...