1

C#で「ドラッグアンドスワップ」を行うにはどうすればよいですか? 最初のラベルを 2 番目のラベルに置き換えたい (逆も同様)。ありがとう!以下は私のドラッグ アンド ドロップ コードです。dragdrop メソッドの下に何かを挿入できることを望んでいますが、データが投稿されている場所を参照する方法がわかりません。

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

1 に答える 1

1

String をドラッグする代わりに、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;
    }

}
于 2013-07-03T21:11:13.717 に答える