0

私は持っている

1) ユーザー コントロール UC (ラジオ ボタンとテキスト ボックスで構成される)

2) 複数の UC タイプ コントロールを含むフォーム

これらの UC コントロール間でドラッグ アンド ドロップを有効にしたい (たとえば、あるコントロールを別のコントロールにドラッグすると、ソース コントロールの構成 TextBox コントロールからターゲット コントロールの構成 TextBox コントロールにテキストが追加される)

私はこれまでに何をしましたか:

1) 私は UC を設定しました。これはコンスティチュエント コントロールであり、AllowDrop = True です。

2) コンテナー形式で、UC コントロールの MouseDown、DragEnter、および DragDrop イベントのメソッドを記述しました。

結果:

ドラッグ アンド ドロップは、構成コントロールを含まない UC の部分を使用してドラッグ アンド ドロップする場合にのみ機能します。つまり、UC 構成 TextBox コントロールでマウス ボタンを押した場合、UC MouseDown は発生しません (UCただし、それを構成する TextBox または RadioButton コントロールではなく、UC MouseDown イベントが発生します)

必要なもの:

コンスティチュエント コントロールでマウス ボタンが押されている (リリースされている) かどうかに関係なく、ドラッグ アンド ドロップが機能する必要があります。

4

1 に答える 1

0

私がする必要があったのは:

1) ユーザー コントロールで - イベント デリゲートを作成します (EventHandler ではなく、MouseEventHandler)。

    public event MouseEventHandler eventName; //this one is accessible from container form

2) ユーザー コントロール内 - コンスティチュエント コントロールのイベントを公開イベントに接続するコンスティチュエント コントロールの MouseDown イベントのメソッドを記述します。

    private void method_MouseDown(object sender, MouseEventArgs e) //attached to constituent control's MouseDown event
    {
            if (this.eventName!= null) this.eventName(this, e);
    }

3) コンテナ形式で、構成要素コントロール公開イベント (eventName) のメソッドを記述します。

4) ユーザー コントロールの DragDrop および DragEnter イベントを使用します (コンスティチュエント コントロールのそれぞれのイベントを使用する必要はありません)。

5) コンスティチュエント コントロールの AllowDrop 属性は False である必要があります。そうでない場合、コンスティチュエント コントロール上でマウス ポインターを移動すると、ユーザー コントロールの DragLeave イベントがトリガーされます。

于 2012-12-24T01:04:12.247 に答える