2009-08-14 8 views
2

2つのDataGridViewを持つアプリがあり、ドラッグ&ドロップを実装してユーザー間でデータを移動できるようにしました。アプリケーションのコンテキスト内で、フォームの2つのインスタンス間で行をドラッグすることは意味のある動作ではありません。私はドラッグでそれを検出する方法がわからないので、DragDropEffects.Noneにe.Effectを設定することができます。アプリの別々のインスタンス間でのドラッグ&ドロップを防止する

ドラッグしてDragDropイベントが暗黙の例外で失敗する場合このリモートプロキシにはチャネルシンクがありません。これは、サーバーにリスンしている登録済みのサーバーチャネルがないこと、またはこのアプリケーションにはサーバーと通信するための適切なクライアントチャネルはありません。

クラッシュを防止するためにこの例外をトラップすることはできますが、プロセス内の実際のデータの破棄を中止するのは悪い習慣ですが、ドロップが許可されたカーソルが表示されるためユーザーに混乱を招く可能性があります落ちることはありません。

答えて

2

マイクロソフトでは、すべてのコントロールが進行中のドラッグアンドドロップ操作からデータを受け取り、AllowDropプロパティをtrueに設定することでドロップゾーンとしてコントロールを指定できることをマイクロソフトは述べています。ドロップゾーンにしたくないコントロールに対してAllowDropをfalseに設定した場合、目的の動作を得られるはずです。

プログラムの2つのインスタンス間でドラッグアンドドロップを検出する場合は、ドラッグオブジェクトにIDを設定します(つまり、コントロールのタグにGUIDを挿入します)。現在実行中のインスタンスのGUIDと一致する場合。

http://msdn.microsoft.com/en-us/library/ms973845.aspx

+0

あなたは私が求めているものを誤解。フォーム上のDGV1とDGV2間のドラッグは両方向で許可されています。私はAllowDropをtrueに設定する必要があります。私のアプリケーションの2つのインスタンスを実行している場合、Instance1からIstance2へのドラッグは許可されていません。私はこれを強制する方法を見つけようとしています。基本的に私はDragSourceIsFromThisProcess()関数が必要です。 –

+0

ドロップする前にどうやって確認していますか?ドロップが発生するまで待っていたら、それは遅すぎませんか? –

+0

私は、動的にロードされたMouseMoveイベントを介してDoDragDropを呼び出しています(左ボタンが押されているときのみ有効です)。私はその旗を設定することができます。 DragEnterイベントは、ドラッグが開始された後に起動されるため、順序が乱れることはありません。 –

関連する問題