Перетаскивание в C#

Как вы делаете «перетаскивание» в С#? Я хочу, чтобы моя первая метка заменила вторую, и наоборот. Спасибо! Ниже приведен мой код перетаскивания — я надеюсь, что смогу что-то вставить в метод перетаскивания, но я не знаю, как указать, где публикуются данные.

private void DragDrop_MouseDown(object sender, MouseEventArgs e)
{
    Label myTxt = (Label)sender;
    myTxt.DoDragDrop(myTxt.Text, DragDropEffects.Copy);
}
private void DragDrop_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.Text))
        e.Effect = e.AllowedEffect;
    else
        e.Effect = DragDropEffects.None;
}
private void DragDrop_DragDrop(object sender, DragEventArgs e)
{
    Label myTxt = (Label)sender;
    myTxt.Text = e.Data.GetData(DataFormats.Text).ToString();
}

person user2548227    schedule 03.07.2013    source источник


Ответы (1)


Вместо перетаскивания строки создайте экземпляр DataObject, чтобы вы могли передать сам Label. Вы можете указать свое собственное имя пользовательского формата, гарантируя, что содержимое соответствует вашим ожиданиям. Вот краткий пример:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private string DataFormatName = "SomeCustomDataFormatName";

    private void DragDrop_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            Label source = (Label)sender;
            DataObject data = new DataObject(DataFormatName, source);
            source.DoDragDrop(data, DragDropEffects.Copy);
        }
    }

    private void DragDrop_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormatName))
            e.Effect = e.AllowedEffect;
        else
            e.Effect = DragDropEffects.None;
    }
    private void DragDrop_DragDrop(object sender, DragEventArgs e)
    {
        Label target = (Label)sender;
        Label source = (Label)e.Data.GetData(DataFormatName);
        string tmp = target.Text;
        target.Text = source.Text;
        source.Text = tmp;
    }

}
person Idle_Mind    schedule 03.07.2013