我想实现从TextBox
到另一个控件的拖放操作。
问题是,当您选择文本的某些部分然后单击TextBox
文本时,将取消选择该文本。因此,当我在DoDragDrop
事件中执行MouseDown
时,textBox.SelectedText
已经为空。
有没有办法避免这种行为?我找到了example,但我不想放弃拖放文本的一部分的可能性。
答案 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