DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DragOverイベントが発生しないときがある

環境/言語:[XP(SP2) Framework1.1]
分類:[.NET]

妙な現象が起きて困っています。
起動時のFormによって、
TreeviewのDragOver、DragDropイベントが発生しないときがあります。
この時NodeをDragするとカーソルが禁止マークになっています。
この為にNodeをDragDropすることができません。

現在2つのFormを持つアプリを造っています。
2つのFormを同時に開くことはなく、Form1を開けば
Form2は閉じています。
Form1にはTreeviewがあり、このTreeviewはNodeをDragDrop
できるようにしてあります。
アプリ起動時のFormは条件によってForm1であったり、
Form2であったりします。

Form1を起動時のFormにした場合はDragOver及びDragDropイベントが発生します。
しかしForm2から起動した後、Form1へ移動した場合は、DragOver及びDragDropイ
ベントが発生しないのです。

・ItemDragイベント中で"DoDragDrop"を実行しています。
・"DoDragDrop"実行前後のTreeView1.AllowDrop のステータスは "True"になっています。
・全コード中にTreeView1.AllowDrop=Falseにする記述はありません。
・TreeviewのNodeのAfterSelect、DoubleClick、BeforeLabelEditイベント等は正常に動いています。

そして、この後Form1→Form2→Form1へ戻ってくると、以降は再びDragOver及びDragDropイベント
が発生します。(正常)

この現象は必ず発生します。
状況としてはTreeView1.AllowDrop=Falseに設定したときの状態とそっくりです.
試しにItemDragイベント中の"DoDragDrop"の前と後に"TreeView1.AllowDrop=True"を記述してみまし
たが駄目でした。

どなたかご教授ください。よろしくお願い致します。
> TreeviewのDragOver、DragDropイベントが発生しないときがあります。
> この時NodeをDragするとカーソルが禁止マークになっています。
> この為にNodeをDragDropすることができません。

カーソルが変わるのであればDoDrgDropは実行されているということですね。
「Form1へ移動」という言葉がありますが、これはクリックしてアクティブにするということですか?
イベントが発生しないというのは、プロシージャエントリが呼ばれないということでいいですか?
#実行されているが禁止マークの処理が走っているという落ちではないですよね?

ここのどぼんさんのTipsにツリービューのドラッグがありますので
Form1と入れ替えて同じ現象になるか確認されてみては。
早速のお返事ありがとうございます。

> カーソルが変わるのであればDoDrgDropは実行されているということですね。

そのようです。

> 「Form1へ移動」という言葉がありますが、これはクリックしてアクティブにするということですか?

いいえ。表示中のForm1をCloseしてForm2をApplication.Runでロードしています。

> イベントが発生しないというのは、プロシージャエントリが呼ばれないということでいいですか?

そうです。

> #実行されているが禁止マークの処理が走っているという落ちではないですよね?

禁止マークの処理=e.Effect = DragDropEffects.None にしているわけではないのです。

> ここのどぼんさんのTipsにツリービューのドラッグがありますので
> Form1と入れ替えて同じ現象になるか確認されてみては。

Form1を入れ替えるのは無理でしたので、Threeview1を削除してもう一度貼り付けてみたのですが同じ結果でした。
そこでもう一つTreeviewを貼り付けて(Treeview2)試してみたところ、そちらではDragOverイベントが発生するので処理をTreeview2へ移植しました。
何がいけなかったのかは分からず仕舞でしたが、無事動作しているので良しとしました。

大変ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板