ListBoxで複数の項目を選択するには?


みみ  2005-11-11 02:58:49  No: 18601

ListBoxで複数の項目を選択したいと思っています。
あるリストに対応した、ListBoxの項目を選択状態にしたいのですが、
Selected[x]にTrueを代入しても選択状態になってくれません。
ちなみに、MaltiSelectはTrueです。

気になっているのは、
Trueを設定した後にShowModalで表示をかけているのですが、
このときに、選択状態がクリアされているように見えます。

そういうものなのでしょうか。

もし、選択を実装するとなると、
onShowイベントで処理をしなくてはいけないのでしょうか。

ご教授お願いします。


みみ  2005-11-11 03:15:57  No: 18602

追加

対象のListBoxがあるのは、制御側のFormと別のFormです。
制御側でFormをCreateして値を設定し、ShowModalで表示しようと思っています。


にしの  2005-11-11 06:25:16  No: 18603

再現できません。

Delphi7で、

  f := TForm2.Create(Self);
  f.ListBox1.Items.add('A');
  f.ListBox1.Items.add('B');
  f.ListBox1.Items.add('C');
  f.ListBox1.Items.add('D');
  f.ListBox1.Items.add('E');
  f.ListBox1.Selected[0] := True;
  f.ListBox1.Selected[1] := False;
  f.ListBox1.Selected[2] := True;
  f.ListBox1.Selected[3] := False;
  f.ListBox1.Selected[4] := True;
  f.ShowModal;

としてやると、ちゃんと0,2,4が選択された状態でShowModalされます。
最小限のコードで再現できますか?
できなければ、他に原因があるかと思います。
# 例えばOnShowでリストボックスを初期化しているとか


Hogehoge  2005-11-11 17:35:01  No: 18604

フォームのimplementation句の上に、そのフォーム用のグローバル変数が定義されますが、
自動生成ではなく、自身でインスタンスを作成しているのであれば、上記変数を
削除してみてください。


みみ  2005-11-11 19:58:18  No: 18605

新しく、ListBoxが載ったFormと、処理を実行するボタンの載ったFormを作成しました。
で、にしのさんのコードをそのまま載せてみました。
Form2のListBoxのMaltiSelectはTrueにしています。

実行すると、"E"の項目のみ点線で囲まれた状態になっています。
(青く選択状態になっていません)
ちなみに、SelectAllでも青くなりません。
showで開くと、選択された状態にはなります。

当方、Delphi2005ですがバグと考えた方がいいのでしょうか。


みみ  2005-11-11 22:17:39  No: 18606

MaltiSelectをTrueにすると選択されないようです。
Falseのままだと選択されます。

MaltiSelectのShowModal時にのみ発生するようです。


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

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






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