- - PR -
ListBox上の座標により適切なアイテムを選択する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-18 14:28
いつもお世話になっております。
現在.net2003 C# Winアプリケーションを作成しています。 ListBox上でマウス座標からListBoxのアイテムインデックスを取得し、アイテムを 選択するプログラムを作りたいと考えています。 MouseMoveイベントを捕まえてやることでなんとか形にはなったのですが ドラッグしてきたアイテムをListBox上で動かしているときにも同じような 動きをさせたいのですが、良いイベントが見つかりません。 ご存知の方がいらっしゃいましたら、よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-02-18 14:51
Drop しない限りは Drag 元の MouseMove イベントになります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-18 15:59
じゃんぬねっとさん、こんにちは。
お早い回答ありがとうございます。 なるほど、Drag元のイベントで捕まえれば良かったんですね。 なんとかやれそうです。ありがとうございました。 | ||||||||
|
投稿日時: 2006-02-19 01:10
ん?
Drag「中」にMouse〜イベントって起きましたっけ? #勘違いかしら。。。 | ||||||||
|
投稿日時: 2006-02-19 09:29
繰り返しになりますが、Drag 元のコントロールで起きます。 Drop した後でない限り Drop 先では一切起きません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-20 10:23
まどかさん、じゃんぬねっとさんお返事遅くなりまして申し訳ありません。
なにぶん不慣れな者で確認を取るのに時間が掛かってしまいました。 Drag元のMouseMoveイベントを捕まえまして、こちらが求めるコードを 書いたのですがうまく行きませんでした。 書いたコードの内容がまずいのだと思いそちらの方を見直しておりました。 しかし、まどかさんの指摘がありましてそちらの方も調べてみました。 こんなコードでTextにログを書き込みまして試してみました。 //ここからはC#のコードです //MouseMoveイベント private void List1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { //ログを書き込むテキストのパス string path = @"C:\メモ.txt"; //追加書き込み式で System.IO.StreamWriter writer = new System.IO.StreamWriter(path,true); //マウスポインタの位置を随時書き込む writer.Write("MouseのX座標は『"+ Cursor.Position.X.ToString() +"』MouseのY座標は『"+Cursor.Position.Y.ToString()+"』です。"); writer.Write("\r\n"); writer.Close(); } //List内でアイテムをドラッグしたときのイベント。 private void List1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e) { //Drag&Drop実行処理。 List1.DoDragDrop(DragするData,DragDropEffects.Move | DragDropEffects.Copy); //ログを書き込むテキストのパス string path = @"C:\メモ.txt"; //追加書き込み式で System.IO.StreamWriter writer = new System.IO.StreamWriter(path,true); writer.Write("ドラッグが開始されました。"); writer.Write("\r\n"); writer.Close(); } ログ用のTextの内容は //ここからはTextの内容 MouseのX座標は『522』MouseのY座標は『275』です。 MouseのX座標は『522』MouseのY座標は『276』です。 MouseのX座標は『521』MouseのY座標は『276』です。 MouseのX座標は『520』MouseのY座標は『276』です。 ドラッグが開始されました。 という感じで”ドラッグが開始されました。”で終了していました。 このことからドラッグ中はMouseMoveイベントが発生していないのではないか? と思われるのですがどうでしょうか。 なにぶん不慣れな者でコード間違い等あると思いますが指摘の方宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-02-20 11:33
すいません、ウソ付きました。 私も今確認したのですが発生していませんね... orz Drag 元でイベントが発生するのは、DragDropEffects がない場合のみですね。 となると派生クラス側で DragEnter 後の WM_NCHITTEST を補足するしかないのかなぁ。
関係ないところですが、Console.WriteLine メソッドを使った方が良いでしょう。 MouseMove するたびに Stream を Open / Close したら負荷がかかりますから。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-20 11:55
DragOverイベントでは駄目ですか?
|