[リストへもどる]
一括表示

投稿時間:2003/03/08(Sat) 16:53
投稿者名:たい
Eメール:
URL :
タイトル:
複数選択リストビューでの行選択方法
皆様、はじめまして。
VB6+SP5、Win2000で開発を行っている者です。

複数選択のリストビューにおいて、シングルクリックで対象行の
選択状態を反転させる方法はありますか?

通常、シングルクリックは対象行が選択されるだけ、
他の選択行はすべて選択が解除されてしまいます。
これを、他の選択行には影響を与えず、対象行の選択状態を
反転させる([Ctrl]+シングルクリックと同様の動き)方法を
探しております。

ご存じの方がいらっしゃいましたら、ぜひご教授下さい。
「そんなことは出来ない!」という意見もお待ちしております。

よろしくお願い致します。

投稿時間:2003/03/08(Sat) 18:40
投稿者名:TOMO
Eメール:
URL :
タイトル:
Re: 複数選択リストビューでの行選択方法
> これを、他の選択行には影響を与えず、対象行の選択状態を
> 反転させる([Ctrl]+シングルクリックと同様の動き)方法を
> 探しております。

GetKeyboardState, SetKeyboardState API を使って
Ctrl キーが押された状態を作れいと思います。

投稿時間:2003/03/08(Sat) 20:26
投稿者名:たい
Eメール:
URL :
タイトル:
Re^2: 複数選択リストビューでの行選択方法
アドバイスありがとうございます!

> GetKeyboardState, SetKeyboardState API を使って
> Ctrl キーが押された状態を作れいと思います。

早速試してみましたが、期待した結果は得られておりません。
MouseUp、MouseDown、ItemClick、Clickと関連しそうな
イベント処理内に、次にような処理を追加しました。
(API、定数宣言は省略します)

Dim keyState(0 To 255) As Byte

GetKeyboardState keyState(0)
keyState(VK_CONTROL) = 1
SetKeyboardState keyState(0)

処理すべきイベントが悪いのでしょうか?
それともSet/GetKeyboardStateの使い方でしょうか?

投稿時間:2003/03/08(Sat) 21:05
投稿者名:TOMO
Eメール:
URL :
タイトル:
Re^3: 複数選択リストビューでの行選択方法
> keyState(VK_CONTROL) = 1

MSDNに、
「最上位ビットが 1 のときはキーが押されていることを、
0 のときはキーが押されていないことを示します。」

と書いてありますね。

投稿時間:2003/03/08(Sat) 21:44
投稿者名:たい
Eメール:
URL :
タイトル:
Re^4: 複数選択リストビューでの行選択方法
> MSDNに、
> 「最上位ビットが 1 のときはキーが押されていることを、
> 0 のときはキーが押されていないことを示します。」
>
> と書いてありますね。

読み落とし、してました。 大成功です!

さきほどのコードを加工して、

GetFocusで、keyState(VK_CONTROL) = &H81
LostFocusで、keyState(VK_CONTROL) = &H0

とすることで期待した動作が得られました。
ちなみに、Form_Unload にも LostFocus と同じ処理を入れてます。
最初、プログラム実行を停止して、VBに戻ったときにも
Ctrlがロックされたままになってしまい、焦りました(笑)

教えていただいたAPIは、別の用途でも利用価値の高いものですね。
TOMOさん、また質問を読んでいただいた方、
本当にありがとうございました!!!