Как избежать отмены выделения текста в Winforms TextBox при нажатии на выделенный текст? - PullRequest
1 голос
/ 11 января 2012

Я хотел бы реализовать операцию перетаскивания из TextBox в другой элемент управления.Проблема в том, что когда вы выделяете какую-то часть текста, а затем нажимаете на TextBox, текст отменяется.Поэтому, когда я выполняю DoDragDrop в MouseDown событии, textBox.SelectedText уже пуст.

Есть ли способ избежать такого поведения?Я нашел следующий пример , но я не хочу упустить возможность перетаскивать только часть текста.

1 Ответ

2 голосов
/ 11 января 2012

Я нашел решение.Вам нужно унаследовать TextBox и переопределить OnMouseDown и WndProc:

public class DragTextBox : TextBox
{
    private string dragText;
    private const int WM_LBUTTONDOWN = 0x201;

    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (dragText.Length > 0)
        {
            SelectionStart = Text.IndexOf(dragText);
            SelectionLength = dragText.Length;
            DoDragDrop(dragText, DragDropEffects.Copy);
            SelectionLength = 0;
        }
        base.OnMouseDown(e);
    }

    protected override void WndProc(ref Message m)
    {
        if ((m.Msg == WM_LBUTTONDOWN))
            dragText = SelectedText;
        base.WndProc(ref m);
    }
}

Оригинальный код автора поста здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...