リストボックスを、条件によって複数選択可・不可にするには?

解決


水無月  2005-11-28 21:03:23  No: 128324

どなたかアドバイスをお願いします!

リストボックスを複数選択できるようにするには、フォームの画面でStyleプロパティやMultiSelectプロパティを変えますよね?
それを、コードで書くことってできないのでしょうか・・・。

List1.Style = VbButtonGraphical

や、

List1.MultiSelect = 1(または2)

と書いても、コンパイルエラーで「値の取得のみ可能なプロパティに値を設定することはできません」って出てしまいます。
ってことは・・・できないってことですか?><。

If文で条件を指定して、複数選択可・不可にしたいです!

情報があれば教えてください!!

あ、ちなみにVB6です^^


030  2005-11-28 21:41:13  No: 128325

Spy++でMultiSelectに1をセットした時と2をセットした時の
リストボックスのウィンドウスタイルの変化をみると

1のとき&H89の属性
2のとき&H881の属性

が追加されていました。
それぞれの定数が何を意味するまでは調べていませんが
GetWindowLongで属性を取得し、その値に上記値をORしてから
SetWindowLongで属性をセットしてやれば、MultiSelect
プロパティに1または2をセットした時と同じ動きになるようです。

その後の動作までは検証していませんので、不具合がでるようでしたら
止めておくほうが無難です。

簡単にするならリストボックスを2つ用意し、それぞれに単一選択
と複数選択の属性を与えVisibleプロパティで制御する方がVBとして
は無難な気がします。


030  2005-11-28 21:45:08  No: 128326

>1のとき&H89の属性
>2のとき&H881の属性
>
>が追加されていました。
>それぞれの定数が何を意味するまでは調べていませんが
>GetWindowLongで属性を取得し、その値に上記値をORしてから
>SetWindowLongで属性をセットしてやれば、MultiSelect
>プロパティに1または2をセットした時と同じ動きになるようです。

すみません、気のせいでした。
ウィンドウスタイルを変更しても動作は変わりませんでしたので
上記は無視して下さい。


水無月  2005-11-28 22:11:24  No: 128327

>>>>030さま

>簡単にするならリストボックスを2つ用意し、それぞれに単一選択
>と複数選択の属性を与えVisibleプロパティで制御する方がVBとして
>は無難な気がします。

これはありかもですね!
ですが、リストボックスが一つではなくて7つありまして、配列にしてあるんですよ(^^;
そうすると7×2で14個のリストボックス・・・うーん。
もうちょっと方法探してみます^^

何か知ってる方、ぜひ教えてください!!


魔界の仮面弁士  2005-11-28 22:27:11  No: 128328

残念ながら、生成時にしか設定できない項目なので、変更できません。

複数選択用と単一選択用の2種類のListBoxを用意し、切り替えて使うか、
もしくは、デザイン時には複数選択用のコントロールにしておき、
  If 単一選択 Then
      For L = 0 To List1.ListCount - 1
          List1.Selected(L) = CBool(List1.ListIndex = L)
      Next
    End If
などとして、単一選択であるかのように見せかける事で回避してみてください。


水無月  2005-11-28 22:31:07  No: 128329

>>>>魔界の仮面弁士さま

んー、やっぱりレイアウトの時しかできないですか(^^;
わかりました!
勉強になりました^^

単一選択であるかのように見せかける作戦で、ちょっとやってみます^^
ありがとうございました♪

アドバイスをくれた方、調べてくれた方、みなさんありがとうございました!!


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

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






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