1
Drag-n-Dropが機能するために必要なものがすべてあるように見えますが、あるコントロールから別のコントロールにドラッグしようとするとコードが呼び出されません。Windowsフォームドラッグアンドドロップ機能
私は、データを作成するために使用するテストクラスを作成しました:
class TestClass { public TestClass() { Name = "Blank"; Id = -1; } public String Name { get; set; } public int Id { get; set; } public object Data { get; set; } public override String ToString() { return String.Format("{0}: {1}", Id, Name); } }
私は
listView1
とlistView2
、2つのリストビューコントロールで空のフォームを作成しました:
私はドラッグ&ドロップ方式のすべてのイベントハンドラを作成し、それらにブレークポイントを置く:
private void Form_DragDrop(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; if (e.Data.GetDataPresent(typeof(TestClass))) { var item = e.Data.GetData(typeof(TestClass)) as TestClass; if (item != null) { // ? } } } private void Form_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; if (sender.Equals(listView2)) { e.Effect = DragDropEffects.All; if (e.Data != null) { var format = GetString(e); Console.WriteLine("{0} has a(n) {1} entering it.", listView2.Name, format); } } } private void Form_DragLeave(object sender, EventArgs e) { if (sender.Equals(listView2)) { } } private void Form_DragOver(object sender, DragEventArgs e) { // Code Project Article 9017 says DragOver fires repeatedly, even if the mouse does not move. if ((e.X != _lastX) || (e.Y != _lastY)) { _lastX = e.X; _lastY = e.Y; if (e.Data.GetDataPresent(typeof(TestClass))) { } else { e.Effect = DragDropEffects.None; } } } private void Form_GiveFeedback(Object sender, GiveFeedbackEventArgs e) { if (sender.Equals(listView2)) { // ? } } private void Form_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { var listView = sender as ListView; if (listView != null) { } } private String GetString(DragEventArgs e) { var result = String.Empty; if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) { var formats = e.Data.GetFormats(); foreach (var format in formats) { Console.WriteLine("Data is in the format of [{0}].", format); result = format; } } return result; }
私は、コンストラクタの
InitializeComponent();
後の両方のコントロールを有線:public ListViewsForm() { InitializeComponent(); // Setup ListView 1: listView1.AllowDrop = true; listView1.DragDrop += Form_DragDrop; listView1.DragEnter += Form_DragEnter; listView1.DragLeave += Form_DragLeave; listView1.DragOver += Form_DragOver; listView1.GiveFeedback += Form_GiveFeedback; listView1.QueryContinueDrag += Form_QueryContinueDrag; listView1.Dock = DockStyle.Fill; listView1.View = View.List; // Setup ListView 2: listView2.AllowDrop = true; listView2.DragDrop += Form_DragDrop; listView2.DragEnter += Form_DragEnter; listView2.DragLeave += Form_DragLeave; listView2.DragOver += Form_DragOver; listView2.GiveFeedback += Form_GiveFeedback; listView2.QueryContinueDrag += Form_QueryContinueDrag; listView2.Dock = DockStyle.Fill; // Create some data: var group1 = new ListViewGroup("Known Colors"); foreach (KnownColor known in Enum.GetValues(typeof(KnownColor))) { var item = new TestClass() { Name = known.ToString(), Id = (int)known, Data = known, }; var color = Color.FromKnownColor(known); var lvi = new ListViewItem(item.ToString(), group1) { BackColor = Color.FromArgb(color.ToArgb()^0xffffff), ForeColor = color, Tag = item, }; listView1.Items.Add(lvi); } }
私はプロジェクトを実行するたびに、すべて正常にロードされますが、LEFT側からRIGHT側に項目をドラッグしようとすると何も起こりません。私のブレークポイントはどれもヒットしません。何も起こりません。
私は何を残しましたか?
たどのようにシンプルに!ありがとう。 – jp2code