单击选定文本时如何避免在Winforms TextBox上取消选择文本?

时间:2012-01-11 12:02:18

标签: c# .net winforms drag-and-drop

我想实现从TextBox到另一个控件的拖放操作。 问题是,当您选择文本的某些部分然后单击TextBox文本时,将取消选择该文本。因此,当我在DoDragDrop事件中执行MouseDown时,textBox.SelectedText已经为空。

有没有办法避免这种行为?我找到了example,但我不想放弃拖放文本的一部分的可能性。

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。您需要继承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);
    }
}

原始代码作者帖子here