リストボックスをドラッグアンドドロップのドロップ先とするプログラムを作成しているのですが、どのリストボックス項目にドロップされたかを知る方法を教えてください。

ドロップ時にはマウス座標が渡されるのですが、この座標からリストインデックスをどのようにして求めたらよいか分からずにいます。
対象としているプログラムは、フォントサイズもリストボックスのサイズも固定ですので、以下のようなコーディングでしのげていますが、フォントサイズやリストボックスサイズが実行時に変えられても対応できるような、もっとスマートな方法はないでしょうか?

リストインデックス = リストボックス.TopIndex + マウスY座標 \ リストボックスの項目の高さ(9ptフォントで180ぐらい?)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

リストボックスの項目の高さ


=Screen.TwipsPerPixelY * _
SendMessage(List1.hwnd, LB_GETITEMHEIGHT, 0, vbNullString)

参考URLのdraglist?.zipにサンプルがあります

参考URL:http://www.vb-helper.com/HowTo/ 
    • good
    • 0
この回答へのお礼

ありがとうございます。

ご紹介いただいたURLは英語なのが多少つらいですが、色々参考になりそうです。
紹介いただいたURLはzipファイルの一覧でしたので、以下のURLを"お気に入り"に追加しました。

http://www.vb-helper.com/howto.htm

お礼日時:2001/10/15 16:14

参考URLが答になっていると思います。


WindowsAPIを使ったりして、あまりスマートとは思いませんが…

参考URL:http://www.microsoft.com/japan/support/kb/articl …
    • good
    • 0
この回答へのお礼

ありがとうございます。

Knowledge Base…基本ですね。
最初から検索すべきでした。

お礼日時:2001/10/15 16:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマウスのホイールと左クリックがおかしい

マウスの左クリックの調子が悪く、一度分解をしてみました。
その左クリックのスイッチの所に届いていない(?)みたいで開けた状態でスイッチを押すと左クリックはきくのですが…。
マウスはHID 準拠マウス というXP購入時に付属していたマウスです。
後、そのときの衝撃で外れたホイールの近くの金具が二個落ちてしまいました。丸まっているパーツ(右クリックの方向)は付けれたのですが左のパーツの位置がどうにもわからなくて・・・。
お暇な方、お願いします。

Aベストアンサー

こういってしまうと元も子もないのですが、マウスなんて安いんだから新しいの買いましょう。

修理方法を知りたいのですか?
写真も無し、型番も無しではさすがに答えようがありませんよ。
ホイール近くの金具? 丸まってるパーツ? なんのこっちゃですよ。

Q【エクセルVBA】ドロップダウンリストに項目追加→他のファイルにも自動的に項目追加がしたい

やりたいことが難しそうなので、できないかもしれませんが、
もしかしたらと思い投稿しました。
まず、エクセルファイル「book1.xls」「book2.xls」「マスター.xls」
を用意します。
どのファイルにもA1~A5に東京、神奈川、千葉、埼玉、茨城と
入力したとします。このA1~A5に都道府県という名前を付けます。
B1にはドロップダウンリストをつくり、都道府県と名づけたセルの内容
が選択できるようにします。
   A    B
1 東京 ドロップダウンリスト
2 神奈川
3 千葉
4 埼玉
5 茨城
ここで「マスター.xls」のA6に栃木と入力し、A1~A6の名前を都道府県
に変更したとします。この時B1のリストの項目は5から6に増えています。
私がやりたいのは、上記のように「マスター.xls」を変更したとき、
「book1.xls」「book2.xls」にも自動的に同様の変更がおこるように
したいのです。
ファイルが3つだったら1つずつ直せばよいですが、実際に私がやろう
としているのは50個くらいあるので、1つずつ直すのは手間がかかり
ます。そこで、1つのファイルのドロップダウンリストの項目を変更
すると他のファイルも同様に変更が加わるような仕組みをつくりたい
のです。
どのような方法でもかまいませんが、マクロを使うなら、
入力すべきコードを正確に教えてください。
よろしくお願いします。

やりたいことが難しそうなので、できないかもしれませんが、
もしかしたらと思い投稿しました。
まず、エクセルファイル「book1.xls」「book2.xls」「マスター.xls」
を用意します。
どのファイルにもA1~A5に東京、神奈川、千葉、埼玉、茨城と
入力したとします。このA1~A5に都道府県という名前を付けます。
B1にはドロップダウンリストをつくり、都道府県と名づけたセルの内容
が選択できるようにします。
   A    B
1 東京 ドロップダウンリスト
2 神奈川
3 千葉
4 埼玉
...続きを読む

Aベストアンサー

>「マスター.xls」を変更したとき、「book1.xls」「book2.xls」にも自動的に同様の変更がおこる...
ではなく、「book1.xls」「book2.xls」を開いた時に「マスター.xls」の最新データを取り込む、
でいいんじゃないでしょうか。
[外部データの取り込み]を使って、マクロも不要な仕様です。

最初に「book1.xls」「book2.xls」...各ファイルを作成する時に仕込みます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter2.htm
ここを参考に、各ファイルに対して、[外部データの取り込み]で「マスター.xls」のマスターシートの
A列だけを取り込む設定をします。

その時、[外部データ範囲のプロパティ]で『ファイルを開くときにデータを更新する』にチェックを入れておけば
各ファイルを開いた時に「マスター.xls」の最新データを取り込む事ができます。

[外部データの取り込み]を設定した範囲はデフォルトで[Excel Files からのクエリ]という名前がつきますから
入力規則のリストに
=Excel_Files_からのクエリ
と設定すれば良いです。

>「マスター.xls」を変更したとき、「book1.xls」「book2.xls」にも自動的に同様の変更がおこる...
ではなく、「book1.xls」「book2.xls」を開いた時に「マスター.xls」の最新データを取り込む、
でいいんじゃないでしょうか。
[外部データの取り込み]を使って、マクロも不要な仕様です。

最初に「book1.xls」「book2.xls」...各ファイルを作成する時に仕込みます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter2.htm
ここを参考に、各ファイルに対して、[外部データの取り込み]で「マスター.xls」...続きを読む

Qマウスの右クリックがおかしいんです。

こんにちは。
マウスの右クリックでコピー&ペーストをよく利用しているのですが
1週間前程からマウスの右クリックを押すと瞬時に消えてしまうと言う現象になりました。
そして先ほどからは右クリックを押すとただの白い箱が出るだけになって
そこを選択すると文字が出てくると言う現象に変わりました。
何をした覚えもありませんが、何故このような状態になるのでしょうか?
ご存知の方がいらしたら是非教えてください。

Aベストアンサー

補足ありがとうございます。
どうやらOSの問題みたいですね~
とりあえずこの辺で探してみてください。

http://support.microsoft.com/default.aspx?scid=fh;JA;KBHOWTO&sd=GN&ln=JA

http://winfaq.jp/

ちなみに右クリックででるメニューは「コンテキストメニュー」って呼ぶらしいです。

頑張ってくださいヽ(^。^)ノ

Qコンボボックスでドロップダウンリストにしたときに・・・・

コンボボックスでドロップダウンリストにしてから実行をすると、最初の項目(一番上)が空白で、その下はリストに書かれてあるように表示されてます。

ドロップダウンしなくても見れるようにするにはどうしたらいのですか?

例: 野菜 ▽    ←ここを表示させたい
   みかん
   かぼちゃ
   りんご
   バナナ

Aベストアンサー

Form_Loadイベントに
Combo1.ListIndex = 0
と書いたら表示されませんか?

以上

Qクリックできない!マウスがおかしい?

数日前から、なんだかマウスが思ったように動いてくれません。
・プルダウンメニューというのでしょうか、下向きの矢印をクリックしてもメニューが出てきてはすぐ引っ込んでしまって選択できない
・文章の一部分を選択しようとドラッグしても、全体が選択されてしまったり、単語だけが選択されてしまう
・いくつか同時にウィンドウを開けている時、ひとつを×で閉じたいのに、勝手にその他のウィンドウまで閉じられてしまう
・・・などなど、数えだしたらきりがありません;;
パソコンを購入したときについていたマウスをそのまま使っているので、もし新しいのを購入するのだとしたら、どれにすればいいのか分からないのです。マウスって寿命があるんですか?まだ数年しか使っていないのですが・・・。今のこの調子が悪いのは、光学マウスというのでしょうか、下に赤い光が点灯しているタイプです。
いままでも何度か、上のような症状が出たりはしたのですが、数日で治っていたのでそのまま使い続けていました。でも、さすがにイライラしてきて。マウスがおかしいのかな、と超初心者の私は思っているのですが、もしかして他におかしい部分がある??それすらも分かりません。
もしこのままのマウスを使い続けるとしたら、どうすれば症状は治まるのでしょうか?買い換えるとしたら、どんなタイプがいくら位で手に入るのでしょうか?それとも、マウスがおかしいのではないのでしょうか?
パソコン初心者の私に、是非ご教示願います。

数日前から、なんだかマウスが思ったように動いてくれません。
・プルダウンメニューというのでしょうか、下向きの矢印をクリックしてもメニューが出てきてはすぐ引っ込んでしまって選択できない
・文章の一部分を選択しようとドラッグしても、全体が選択されてしまったり、単語だけが選択されてしまう
・いくつか同時にウィンドウを開けている時、ひとつを×で閉じたいのに、勝手にその他のウィンドウまで閉じられてしまう
・・・などなど、数えだしたらきりがありません;;
パソコンを購入したときについて...続きを読む

Aベストアンサー

もちろんマウスも消耗品ですから壊れますよ。
出来れば誰か知り合いが使っているマトモなマウスを貴方のPCにさして使ってみてほしいです。
それで何の問題もなく動くようであれば完全にマウスが壊れたと思って頂いて結構です。
新しく購入する際はお好きなマウスを買ってOKです。安いのでも高いのでもお好きなものをどうぞ。とりあえずお店に行って店員に直接聞いた方が色々と楽だと思います。

Qリストボックスでの選択項目分削除について。

こんばんは。
リストボックスでのマルチセレクトで選択した項目を削除する
方法で悩んでいます。
(リストボックスで3項目選択したとして、この3項目を削除する方法)

解答は現在勉強している本に掲載されているのですが意味が分からず。

解答のコードの方にはリストを後ろから削除しているみたいなのですが、
前から削除しても大丈夫だと思いやってみましたが、エラーが出てしまいます。

解説には、先頭から削除するとその時点でリストのインデックス値がずれて
しまう。と書いてあるのですが、後ろから削除しても一緒だと考えこんでいます。

解答コード
**********************************************************
Private Sub Command2_Click()
Dim i As Integer

'選択状態(Selected=true)の項目だけ削除
For i = List1.ListCount - 1 To 0 Step -1
If List1.Selected(i) = True Then
List1.RemoveItem i
End If
Next i

End Sub
*********************************************************

と言う解答コードを自分は、前から削除するように

自分なりのコード
*********************************************************
Private Sub Command2_Click()
Dim i As Integer

For i = 0 To listcount-1
If List1.Selected(i) = True Then
List1.RemoveItem i
End If
Next i

End Sub

*************************************************************
で作成してみましたが、やっぱりエラーが。

なぜ、前から削除するとエラーになってしまうのか、
もう少し具体的に教えてくれると助かります。

よろしくお願いします。m(__)m

こんばんは。
リストボックスでのマルチセレクトで選択した項目を削除する
方法で悩んでいます。
(リストボックスで3項目選択したとして、この3項目を削除する方法)

解答は現在勉強している本に掲載されているのですが意味が分からず。

解答のコードの方にはリストを後ろから削除しているみたいなのですが、
前から削除しても大丈夫だと思いやってみましたが、エラーが出てしまいます。

解説には、先頭から削除するとその時点でリストのインデックス値がずれて
しまう。と書いてあるのですが、...続きを読む

Aベストアンサー

こんにちわ。

コードの処理に沿って順番に説明しますね。
リストの内容はA~Eの5個あり、BとDを選択した状態だとします。

*リストの内容**
1|A
2|B ←選択
3|C
4|D ←選択
5|E
**************

これを解答コードのように後ろから削除する場合、5から1まで繰り返し判定するわけですが、
1回目(5):Eは選択されていませんので何もしません。
2回目(4):Dが選択されているので削除します。

*リストの内容**
1|A
2|B ←選択
3|C
4|E
**************

3回目(3):Cは選択されていませんので何もしません。
4回目(2):Bが選択されているので削除します。

*リストの内容**
1|A
2|C
3|E
**************

5回目(1):Aは選択されていませんので何もしません。
結果、以下のようなリストになり正常に動作します。

*リストの内容**
1|A
2|C
3|E
**************

同じ様にmineral01さんのコードのように前から削除する場合、
1回目(1):Aは選択されていませんので何もしません。
2回目(2):Bが選択されているので削除します。

*リストの内容**
1|A
2|C
3|D ←選択
4|E
**************

3回目(3):Dが選択されているので削除します。
(この時点でインデックスがずれているためCの判定が飛ばされてしまいます。)

*リストの内容**
1|A
2|C
3|E
**************

4回目(4):4番目の要素が無いためエラーになります。
この段階ではもうリストの内容が3つしかないために、4番目の内容を取得しようとするとインデックスエラーとなってしまいます。

どうしても前から削除したい場合は、以下のコードで大丈夫だと思います。
mineral01さんのコードに追記してみました。
*********************************************************
Private Sub Command2_Click()
Dim i As Integer

For i = 0 To List1.listcount - 1
If List1.Selected(i) = True Then
List1.RemoveItem i
i = i - 1
End If
If i >= List1.ListCount - 1 Then
Exit For
End If
Next i

End Sub

*************************************************************

長文なってしまい、申し訳無いです。参考になれれば幸いです。

こんにちわ。

コードの処理に沿って順番に説明しますね。
リストの内容はA~Eの5個あり、BとDを選択した状態だとします。

*リストの内容**
1|A
2|B ←選択
3|C
4|D ←選択
5|E
**************

これを解答コードのように後ろから削除する場合、5から1まで繰り返し判定するわけですが、
1回目(5):Eは選択されていませんので何もしません。
2回目(4):Dが選択されているので削除します。

*リストの内容**
1|A
2|B ←選択
3|C
4|E
**************...続きを読む

Qマウスのクリックとドラッグの動作がおかしい

現在、二年程前に買ったマウスを使っていますが、動作が変になりました。症状は以下の通りです。

1.エクスプローラでフォルダをクリックや長押しすると、ダブルクリックしたときと同じようにフォルダが開かれる。
2.ファイルを複数選ぶとき、Ctrlキーを押しながらクリックや、ドラッグすると途中で選択が外れる。
3.ブラウザのスクロールバーをドラッグしていると、途中でドロップされる。
4.フォルダ、ファイルをドラッグして移動出来ない。
5.お気に入りのURLをドラッグしようとすると、クリックしたようにそのページが開かれる。

買い替えの時期だとすれば、何か留意すべきことは有りますか?

Aベストアンサー

・シングルクリックで開く設定になっていないか。
・マウスユーティリティを使っていないか。
・ノートPCだったらタッチパッドを無効にしても症状が出るか。
・マウスパッドを変えても同様か。
・セーフモードで起動したときも症状が再現するか。

などを確認した上、やっぱり症状が出るといった場合はマウスの故障っぽいですね。

Qエクセル VB: フォーム内のリストボックスの項目

エクセルVBなのですが、フォームをつくってその中にリストボックスを配置しました。
コマンドボタンで呼び出して、シート内にあるリストから項目を抽出し反復を省略したリストを
フォーム内のリストボックスに作りたいのですが。


Private Sub CommandButton1_Click()

UserForm1.Show
(このあとリスト項目のコード)
End Sub

コマンドボタンをクリックすると、UserForm1が現れますが、リストの中身は空です。一度Unload meでフォームを終わらせて、2回目クリックするとリストの中身が現れます。
一回目のクリックでエラーは出ません。

一回目のクリックでリストを配置したいのですが、何が問題なんでしょうか?

Excel2003 Windows Xp です。

よろしくご教示下さい。

Aベストアンサー

Private Sub Userform_Initialize()

ここでリストボックスにデータを入力するようにします。

End Sub

そのあとで

Private Sub CommandButton1_Click()

UserForm1.Show
(このあとリスト項目のコード)← ここでは必要ありません。
End Sub

Qマウスの右クリックの動作がおかしい

過去ログを見たのですが、見つけることができずに、質問させていただきます。

OSはWin98SE
IEは6.0

のノートブックですが、IEで右クリックをすると、前の画面に戻ってしまいます。
以前は、メニューが表示されていたのですが。
(Windowsのデスクトップ画面ではメニューがでます。どうも、IEのときだけのようです)

特別な設定等をした記憶はないのですが、右クリックでメニューを出す設定に戻したいのです。

どなたか、設定方法のわかる方がいらっしゃしましたら、アドバイスお願いします。

Aベストアンサー

問題のありそうなところをチェックしていくと
(1)マウスの設定の問題(PS/2互換マウスだったら設定ではないと思います)
(2)マウスドライバーの誤作動
(3)フリーソフトと相性がわるい
(4)IEの誤作動
(5)OSの誤作動
などですか

最初にとりあえず再起動を試してね。
(1)に関しては、前のかたがかいてますので 設定のマウスのところを確認してみてください
(2)に関しては コントロールパネルのシステムを開いてマウスのところにびっくりマークがでていたらマウスのところをすべて削除して再起動してみてください

出てなくてもドライバーを削除して再起動してもいいと思います。
自動的にインストールされるか(ドライバー)されなかったら、ドライバーを入れなおしてください。

(3)に関しては、最近入れたフリーソフトなどを思い出して削除してみてください。それだけで障害が収まることがあります。
また、フリーフォントなどで起こることもあります。

(4)に関してはIEをいったん削除して再インストールしてみてね
(個人的にはIE6.0はまだ好きになれないけどね)


(5)それでだめだったらリカバリーするか OSをいれなおしてね
リカバリーのほうがいいかも

問題のありそうなところをチェックしていくと
(1)マウスの設定の問題(PS/2互換マウスだったら設定ではないと思います)
(2)マウスドライバーの誤作動
(3)フリーソフトと相性がわるい
(4)IEの誤作動
(5)OSの誤作動
などですか

最初にとりあえず再起動を試してね。
(1)に関しては、前のかたがかいてますので 設定のマウスのところを確認してみてください
(2)に関しては コントロールパネルのシステムを開いてマウスのところにびっくりマークがでていたらマウスのところをすべて削除して再起動してみて...続きを読む

QVB6のリストボックスで特定の項目に色をつけるには?

VB6.0で複数の数値データをリストボックスに登録した場合、例えば100以上のデータの場合、赤色をつけるにはどうすればいいのでしょうか。
下記で(1)のコードが打てればいいのでしょうが、List1.List(i)に対してForeColorプロパティは使用できません。

For i = 0 To List1.ListCount - 1
If List1.List(i) >= 100 Then
List1.List(i).ForeColor=vbRed(1)
End If
Next i

どなたか教えてください。

Aベストアンサー

VBでは
Private Sub UserForm_Click()
ListBox1.ForeColor = vbRed
ListBox1.BackColor = vbCyan
'MsgBox ListBox1.List(3)
End Sub
が限度のようです。


人気Q&Aランキング

おすすめ情報