2017-08-07 8 views
0

2つの画像ボックスと2つのラベルで構成されるコントロール(表と呼ばれる)を作成しました。カスタムコントロールのドラッグアンドドロップC#

パネルから別のパネルにドラッグアンドドロップしようとしていますが、動作しません。 これは私のコードです:もちろん、私はpanel2でtrueに設定したAllowDrop

void TableExampleMouseDown(object sender, MouseEventArgs e) 
    { 
     tableExample.DoDragDrop(tableExample, DragDropEffects.Copy); 
    } 

    void Panel2DragEnter(object sender, DragEventArgs e) 
    { 
     e.Effect = DragDropEffects.Copy; 
    } 

    void Panel2DragDrop(object sender, DragEventArgs e) 
    { 
     panel2.Controls.Add((Table) e.Data.GetData(e.Data.GetFormats()[0])); 
    } 

。すでに(Panel1にある)Tableオブジェクトをクリックすると、マウスカーソルは変更されません。 MouseDownイベントが発生しないようです...

ありがとう!

これは私がハンドラをサブスクライブするコンストラクタコードの一部です:あなたはMouseDownイベントをサブスクライブするのを忘れているように見える

 this.tableExample.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TableExampleMouseDown); 
     this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Label2MouseDown); 
     this.panel1.DragDrop += new System.Windows.Forms.DragEventHandler(this.Panel1DragDrop); 
     this.panel1.DragEnter += new System.Windows.Forms.DragEventHandler(this.Panel1DragEnter); 
+0

だから、 'MouseDown'で[**ブレークポイント**](https://msdn.microsoft.com/en-us/library/5557y8b4.aspx)を配置し、それが火をした場合に参照しますか、ない。 –

+0

私は試してみましたが、それは起動しないことがわかりました...代わりに、TextBoxなどの標準コントロールで同じことをすると、正常に動作します... – Pietro

+0

実際に購読していないようですイベント...下の私の答えを参照してください。 –

答えて

0

。イベントハンナーを書くだけでは不十分です。 イベントハンドラまたはフォームのコンストラクタでこれを入れて

tableExample.MouseDown += new MouseEventHandler(TableExampleMouseDown); 

詳細についてはマニュアルを参照してください:How to: Subscribe to and Unsubscribe from Events - Microsoft Docs


EDIT:

それはまた、あなたのカスタムコントロールの子コントロールの1つを押すことが考えられます。子コントロールには独自のMouseDownイベントがあります。

MouseEventHandler mouseDownHandler = (object msender, MouseEventArgs me) => { 
    this.OnMouseDown(me); 
}; 
foreach(Control c in this.Controls) { 
    c.MouseDown += mouseDownHandler; 
} 

EDIT 2:

ベース

は、子コントロールは、親コントロールの MouseDownイベントがコンストラクタカスタムコントロールの でこれを入れて上げるようにするにはあなたが質問に追加した新しいコードでは、のイベントに登録するのを忘れてしまったようです:

this.panel2.DragDrop += new System.Windows.Forms.DragEventHandler(this.Panel2DragDrop); 
this.panel2.DragEnter += new System.Windows.Forms.DragEventHandler(this.Panel2DragEnter); 
+0

ありがとう、ありがとう。おそらく気晴らしのエラーでした。とにかくMouseDownイベントは発生しますが、DragEnterとDragDropはまだ動きません。または、パネル2にラベルをドラッグアンドドロップすると正しく動作しますが、tableExampleをドラッグしようとすると、まだ何も表示されません。 – Pietro

+0

@Pietro:あなたの質問にいくつかのコードを追加できますか?たとえば、フォームコンストラクタのように、あなたが購読しているイベントを見ることができます。 –

+0

私はいくつかのコードで私の質問を編集しました。お返事ありがとうございます。 – Pietro

関連する問題