C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#でのListViewへのドロップ処理について


(過去ログ 21 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■9280 / inTopicNo.1)  C#でのListViewへのドロップ処理について
  
□投稿者/ ケン (1回)-(2007/10/24(Wed) 10:41:18)

分類:[C#] 

C#のListViewへのドロップ処理について質問です。

Visual Studio 2005で開発してるのですが
フォームにListViewコントロールを貼り付けて
プロパティでAllowDropをtrueにしているのですが
DragDropイベントが発生しません。
と言うか、ファイルをドロップしようとしても
マウスカーソルがNOのままになり
何もドロップできない状態になってしまいます。
いろいろ調べても、AllowDropをtrueにするぐらいしか
プロパティの変更はないように思えるのですが
どのようにしたらドロップできるようになるのでしょうか?

どなたかお分かりになる方いらっしゃいませんでしょうか?
引用返信 編集キー/
■9281 / inTopicNo.2)  Re[1]: C#でのListViewへのドロップ処理について
□投稿者/ επιστημη (612回)-(2007/10/24(Wed) 10:50:59)
επιστημη さんの Web サイト
> プロパティでAllowDropをtrueにしているのですが
> DragDropイベントが発生しません。

ItemDrag/DragEnterイベントは適切に処理されているでしょうか?

つ【http://uchukamen.com/Programming1/DragAndDrop/#SEC7


引用返信 編集キー/
■9282 / inTopicNo.3)  Re[2]: C#でのListViewへのドロップ処理について
□投稿者/ ケン (3回)-(2007/10/24(Wed) 11:03:54)
とりあえず外部のファイルをDropする動きだけ見たかったので
Dragの処理は入れていません。
DragEnterとItemDragはListViewに入っている
アイティムの選択イベントだと解釈しているのですが
間違っていますか?


No9281 (επιστημη さん) に返信
>>プロパティでAllowDropをtrueにしているのですが
>>DragDropイベントが発生しません。
>
> ItemDrag/DragEnterイベントは適切に処理されているでしょうか?
>
> つ【http://uchukamen.com/Programming1/DragAndDrop/#SEC7
>
>
引用返信 編集キー/
■9284 / inTopicNo.4)  Re[3]: C#でのListViewへのドロップ処理について
□投稿者/ επιστημη (613回)-(2007/10/24(Wed) 11:26:59)
επιστημη さんの Web サイト
> DragEnterとItemDragはListViewに入っている
> アイティムの選択イベントだと解釈しているのですが
> 間違っていますか?

DragEnterは"何者かがコントロール内に侵入した"ときのハンドラのはず。
こいつを処理しないとマウスカーソルを"NO"以外にできんのとちゃう?

引用返信 編集キー/
■9285 / inTopicNo.5)  Re[3]: C#でのListViewへのドロップ処理について
□投稿者/ 魔界の仮面弁士 (483回)-(2007/10/24(Wed) 11:27:52)
No9282 (ケン さん) に返信
> DragEnterとItemDragはListViewに入っている
> アイティムの選択イベントだと解釈しているのですが
> 間違っていますか?

ドロップ先(この場合は ListView)が、
 「ファイルはドロップできるが、テキストデータではドロップ不可」
などを示すための、「受け入れ準備のための処理」が記述されていないと、ドロップできません。


ドロップ先では、外部からドラッグされてきたアイテムの座標に対して、
 ListView 領域内に入ったら …… DragEnter が発生
 ListView 領域上を通過中に …… DragOver が発生
 ListView 領域から外れたら …… DragLeave が発生
のようにイベントが発生しますので、ここに処理を記述します。


たとえば、ファイルのドロップのみを受け付けるなら、DragEnter イベントはこうなります。

  if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  {
   e.Effect = e.AllowedEffect;
  }

ドラッグ中のマウスカーソルを、コピーのアイコンにしたいなら、

  if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  {
   if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
   {
    e.Effect = DragDropEffects.Copy;
   }
  }

という感じです。

Shift, Control などのキー入力に対して、コピー/移動などを切り替えたい場合は、
e.KeyState の判定を加えてください。

ListView 全域にドロップ可能にするのではなく、特定のアイテム上だけにドロップ可能とさせるなら、
(DragEnter ではなく)DragOver イベントを用いるようにし、そこで ListView の HitTest メソッドを
呼び出してやると良いかと。
引用返信 編集キー/
■9336 / inTopicNo.6)  Re[4]: C#でのListViewへのドロップ処理について
□投稿者/ ケン (4回)-(2007/10/24(Wed) 19:08:06)
レスが遅くなりました。

DragEnterに処理を追加してうまくいきました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -