C#WindowsForms如何切换拖放操作

时间:2019-05-21 07:48:24

标签: c# forms label drag

我对C#/ Windows窗体中的拖放有疑问。 我有2个标签。 “ labelPos25”和“ labelPos32A”。我想通过拖放相互切换。因此,在拖放之后,labelPos25的文本为labelPos32A的文本,labelPos32A的文本为labelPos25的文本。

我已经创建了以下函数来将labelPos25移动到labelPos32A上:

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);
        }

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

1 个答案:

答案 0 :(得分:0)

GetDataGetDataPresent必须使用不同的重载。除了使用string作为参数之外,还可以使用Type作为参数,然后不仅可以访问Text,还可以访问整个Label ..:

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 ..

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