CheckListBoxの挙動について。

解決


to  2009-05-29 02:33:26  No: 34556

CheckListBoxについて教えて下さい。

Colmunsプロパティに2を設定し実行し、
チェックをつけるためにCheckListBoxに表示されている
右側の列のアイテムをクリックしようとすると
選択される(グレー反転する)項目は目的のアイテムなのですが
チェック欄にチェックがついてしまうのが
実際選択しようとした項目のもう一列右側のチェック欄になってしまい、
CheckListBox自体も左へスクロールしてしまいます。
・・・わかりづらいので、CheckListBoxの状態も記述します。

CheckListBoxは、こんな状態です。

□アイテム01    □アイテム06  侠▲▲ぅ謄・1  
□アイテム02    □アイテム07  侠▲▲ぅ謄・2  
□アイテム03    □アイテム08  侠▲▲ぅ謄・3  
□アイテム04    □アイテム09  カ
□アイテム05    □アイテム10  カ

アイテム11~13はColmuns=2の指定により枠外(?)です。
アイテム06をチェックするべく、
アイテム06のチェック欄の□(あえて□の箇所)をクリックするのですが、
クリックと同時にCheckListBoxがスッと左にスクロールしてしまい
選択される(グレーになる)のは[アイテム06]のところで、
チェックがつくのが[アイテム11]の□(チェック欄)になってしまいます。

特にチェック時に何かしらの処理を入れているわけではないので、
プログラムは問題ないと思います。

この現象を回避する方法をご存じの方がいらっしゃいましたら、
教えていただけないでしょうか。

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


to  2009-05-29 02:35:45  No: 34557

すみません。
CheckListBoxが文字化けしてしまったので、
その箇所だけ再投稿します。

□アイテム01   □アイテム06  :□アイテム11  
□アイテム02   □アイテム07  :□アイテム12  
□アイテム03   □アイテム08  :□アイテム13  
□アイテム04   □アイテム09  :
□アイテム05   □アイテム10  :

こんな感じです。
よろしくお願い致します。


igy  2009-05-29 07:18:16  No: 34558

Delphi2009(Update4まで適用済み)で試したところ、そのような現象は
おきませんでしたが、
お使いのDelphiのバージョンと、最新のUpdateは適用済みの有無は、どうなっていますか?
また、その現象は、単純なテストプログラムでも発生しますか?


to  2009-05-29 18:21:12  No: 34559

>>igyさん
すみません、
環境書くの忘れてましたね・・・。
Delphi5 Up1 です。

まっさらなフォームに貼り付けて、
Colmuns=2、Itemsに上記の値を設定し
実行しても発生します。


to  2009-05-29 19:33:41  No: 34560

たびたびすみません。
今、Delphi6でもやってみたところ、
現象が出ませんでした。

Delphi5の問題?


ofZ  2009-05-29 22:18:39  No: 34561

解決策じゃなくてスイマセン

CheckListじゃなくて、ListBoxの問題と思われる。
ListBoxでも、Colmuns=2で、右の列をクリックして選択すると
左列になるようにスクロールしてしまう。
CheckListは、この後でチェックのオン/オフするから、ずれて
チェックされる。


たぬ吉  2009-05-29 23:38:03  No: 34562

Delphi6 はもっていないのですが、Delphi5と7のソースコードを
みました。
どうも、delphi5のCustomListBox(CheckListBoxの派生元)の項目の幅
の算出方法が間違っていると思われます。(Colmuns<>0でないとき)
delphi7のコードでDelphi5を修正したら、正常に動作しました。

toさんはDelphi6をもっていますので、そちらで作成したらいいと思います。
Delphi5 pro以上ならソースコードを修正してもいいかもしれません。
ソースコードをアップすると問題があるかもしれませんのでアップはしま
せんが、箇所としてはTCustomListBoxのSetColumnWidthがあやしいと思い
ます。(ちゃんとみてませんが)


to  2009-05-30 00:47:37  No: 34563

>>ofZさん
>>たぬ吉さん
コメントありがとうございます(^^)

Delphi5proだったのでたぬ吉さんから教えていただいた通り
そのままDelphi6のソースコード流用しDelphi5を直して実行したところ、
スクロールせず目的の項目にチェックマークがつくようになりました。
たぬ吉さんの仰るとおりTCustomListBoxの
SetColumnWidthがまずかったみたいです。

本当にありがとうございましたm(_ _ )m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加