C # WindowsForms Как переключить операцию перетаскивания - PullRequest
0 голосов
/ 21 мая 2019

У меня есть вопрос о перетаскивании в C # / Windows Forms.У меня 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 голосов
/ 21 мая 2019

Вам придется использовать другую перегрузку для GetData и GetDataPresent. Вместо 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;
...