C# Windows Forms如何切换拖放操作

C# WindowsForms How to switch drag and drop operation

我有一个关于在 C#/Windows 表单中拖放的问题。 我有 2 个标签。 "labelPos25" 和 "labelPos32A"。我想通过拖放相互切换。所以拖拽后labelPos25的文本就是labelPos32A的文本,labelPos32A的文本就是labelPos25的文本

我创建了这些函数来在 labelPos32A 上移动 labelPos25:

private void LabelPos32A_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Move;
        }

        private void LabelPos32A_DragDrop(object sender, DragEventArgs e)
        {
            var ob = sender as Label;
            ob.Text = (string)e.Data.GetData(DataFormats.Text);

        }

        private void LabelPos25_MouseDown_1(object sender, MouseEventArgs e)
        {
            var ob = sender as Label;
            DoDragDrop(ob.Text, DragDropEffects.Move);
        }

如何强制切换标签文本而不是移动?有什么办法吗?

您必须对 GetDataGetDataPresent 使用不同的重载。您可以使用 Type 作为参数,而不是 string,然后您不仅可以访问 Text,还可以访问整个 Label..:[=​​21=]

private void LabelPos32A_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(Label))) e.Effect = DragDropEffects.Move;
}

private void LabelPos32A_DragDrop(object sender, DragEventArgs e)
{
    var ob2 = sender as Label;
    var ob1 = (Label)e.Data.GetData(typeof(Label));
    string s2 = ob2.Text;
    ob2.Text = ob1.Text;
    ob1.Text = s2;
}

private void LabelPos25_MouseDown_1(object sender, MouseEventArgs e)
{
    var ob = sender as Label;
    DoDragDrop(ob, DragDropEffects.Move);
}

如果你愿意,你也可以自己切换两个 Labels,即不只是 Text,而是 Location..:[=​​21=]

   Point p2 = ob2.Location;
   ob2.Location = ob1.Location;
   ob1.Location = p2;