2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« 梅 | トップページ | 銀色のスズメ(?) »

2008.03.10

ListIndexとSelectedIndexは違う

VB .NETへの移行でまたまた問題が発生しました。今度はリストボックスです。

MicrosoftのVB .NET移行ガイドを見ると、

「ListIndexプロパティがSelectedIndexプロパティに変更されています。」

と書いてあります。ところがこれが曲者でした。


複数選択リストボックスの場合、VB6では選択・非選択に関係なく、カーソル位置がリストボックス上のどの行にあるかを取得するためにListIndexプロパティを使っていました。
ところがSelectedIndexプロパティはあくまで選択されている項目しか返しませんので、選択数が0の場合は-1しか帰ってきませんし、複数選択されている場合はそのうちの一番最初のインデックスしか帰ってきません。
ListIndexプロパティとは違って、SelectedIndexプロパティでは現在のカーソル位置のインデックスは取得できないのです。代わりになるようなものも見つかりません。

CheckedListBoxというやつを使うと、SelectedIndexプロパティに希望する(VB6のListIndexと同じ)値が帰ってくるということがわかったのですが、今度はタブ位置を設定できません。
タブ位置の設定はAPI(というか、SendMessage()でLB_SETTABSTOPSメッセージを送っている)でやっているのですが、CheckedListBoxではこのメッセージを処理してくれないのではないかと思います。VB6のときも、Styleプロパティをチェックボックスにしたときは同じくだめだったような記憶が微かにあります。

タブ位置に関してはCustomTabOffsetsというプロパティがあるのですが、ReadOnlyなので設定できないのですね。どこがカスタムなんだか。


結局、CheckedListBoxを使って、タブを使わないで済むように表示を変更するという感じで逃げることにしましたが、今度はSelectedIndexを除くSelectedなんとかのプロパティをCheckedなんとかに書き換える必要が出てきて、作業が増えました(;_;)。

自分が使うために作ったしょぼいツールだから、こんな適当(というか強引)な仕様変更も通るというところがせめてもの救いです。

« 梅 | トップページ | 銀色のスズメ(?) »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/39755/40445886

この記事へのトラックバック一覧です: ListIndexとSelectedIndexは違う:

« 梅 | トップページ | 銀色のスズメ(?) »

にほんブログ村

Amazon.co.jp