2

私はいくつかの調査を行い、これを見つけました:

DataObject d = new DataObject();
d.SetData(DataFormats.Serializable, myObject);
d.SetData(DataFormats.Text, myObject.ToString());
myForm.DoDragDrop(d, DragDropEffects.Copy);

Winフォームにドラッグアンドドロップするコードスニペット。

そして、私はそれをこのように実装しようとしました(WPF):

private void listView1_MouseMove(object sender, MouseEventArgs e)
    {
        try
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                DataObject d = new DataObject();
                d.SetData(DataFormats.Serializable, listView1.SelectedItem);
                d.SetData(DataFormats.Text, listView1.SelectedItem.ToString());
                DragDrop.DoDragDrop(listView1, d, DragDropEffects.Copy);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

ListViewItemをメモ帳にドラッグドロップすると、おそらく選択したアイテムのクラス名がコピーされると思っていました(これは、listView1.SelectedItem.ToString()であるためです...)しかし、代わりにメモ帳にキャンセル記号の画像が表示されました。ホバリングし、マウスボタンを離しても何もコピーされませんでした。

これの全体的な目標は、クラスをコンマ区切りの文字列に変更して、メモ帳にコピーして貼り付けるときに、クラスのすべてのデータが適切な形式になるようにすることです。

しかし、誰かがクラス名をコピーするのを手伝ってくれるなら、そこからそれを理解できると確信しています:o

4

1 に答える 1

3

そう……うん。

  bool alreadycopying = false;

    private void listView1_MouseMove(object sender, MouseEventArgs e)
    {
        try
        {
            if (e.LeftButton == MouseButtonState.Released)
            {
                alreadycopying = false;
            }


            if (e.LeftButton == MouseButtonState.Pressed && alreadycopying == false)
            {
                alreadycopying = true;
                System.IO.StreamWriter test = new System.IO.StreamWriter(@"C:\SuperSecretTestFile.txt");
                test.WriteLine("Test");
                test.Close();

                List<String> testlist = new List<string>();
                testlist.Add(@"C:\SuperSecretTestFile.txt");

                DataObject d = new DataObject();
                d.SetData(DataFormats.FileDrop, testlist.ToArray<string>());
                DragDrop.DoDragDrop(listView1, d, DragDropEffects.All);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

貧弱なメモ帳技術を何度も叩いた後、c# が勝利を収めました <.<

于 2012-11-09T14:42:06.887 に答える