- ベストアンサー
複数のコンボボックスの項目の表示/非表示について(VB6.0)
コンボボックスにて Combo1(0)のリスト "A" "B" "C" Combo1(1)のリスト "A" "B" "C" Combo1(2)のリスト "A" "B" "C" Combo1(3)のリスト ・ ・ ・ と複数のコンボボックスを用意し、それらのコンボボックスにおいて表示するの内容を全て同じ内容にします。この時、例えばCombo1(0)で"A"が選択されると、他のコンボボックスでは"A"がリストに表示されなくなる、またCombo1(0)にて"A"を選択解除すると他のコンボボックスにおいて再度"A"がリストに表示されるという様に、同じリストを持つ複数のコンボボックスにおいて、重複選択できないように表示/非表示を切り替えたいのですが上手い方法が思いつきません。分かる方がおられましたら御教授宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
このロジックですと 選択項目数<=コンボボックスの数 となっている場合、何も出来なくなってしまうコンボボックスが出来ますね。 ですので私でもpalmmyさんと同じように考えます。 それはともかく、 >If Combo1(i).List(Combo1(i).ListIndex) = Combo1(j).List(Combo1(j).ListIndex) Then... が大変なのは、オブジェクトとそのプロパティに複数回アクセスしているからです。 この場合、「コンボボックスの中身・順番は全て一緒」なのですよね。 だとするとListIndexを比較するだけで済みそうですけど。 というより、そうすべきでしょう。
その他の回答 (2)
- jmh
- ベストアンサー率23% (71/304)
こんばんわ。 コンボボックスがフォーカスを得た瞬間とかに、選択肢全体から、既に選ばれたものを削除して、現在選択可能なリストを作って、そのコンボボックスのリストを完全に再構築すれば、できるんじゃないかという気がしますが…。 単純に複数選択可能(MultiSelect)なリストボックスじゃダメなんでしょうか? ちなみに、エクセル2000のデータの「並べ替え」のダイアログでは、2つ以上のコンボボックスが同じ値を持つことが過ちであるにもかかわらず、それができます。 Collection の Key は重複できないことを利用すれば、重複選択の検出は簡単にできるような気がします。
お礼
こんばんは、回答有難うございます。 >コンボボックスがフォーカスを得た瞬間とかに、選択肢全体から、既に選ばれたものを削除して、現在選択可能なリストを作って、そのコンボボックスのリストを完全に再構築すれば、できるんじゃないかという気がしますが…。 なるほど、そういうやり方もあるのですね、勉強になりました。さっそく試してはみたのですが、当方初心者でして削除するところまでしか出来ませんでした。もう少し勉強してから再度挑戦しようと思います。
- palmmy
- ベストアンサー率38% (841/2169)
>上手い方法が思いつきません。 直接の回答ではありませんが、選択後に重複しているかのチェックをして、"すでに選択されています。違う値を選択してください。"とエラーメッセージを表示する方法もあります。
補足
回答有難うございます。 >選択後に重複しているかのチェックをして、"すでに選択されています。違う値を選択してください。"とエラーメッセージを表示する方法もあります。 コメントして頂いた方法でチェックをかける場合に、 For i = 0 To A For j = 0 To B If Combo1(i).List(Combo1(i).ListIndex) = Combo1(j).List(Combo1(j).ListIndex) Then... 上記のような判定方法しか(リストの内容全てについて比較を行い判定)思いつきません。今回使用するリストとコンボボックスの数が多い為、上記の方法だと時間がかかってしまいます。もしもっと良いチェック方法をご存知でしたら御教授して頂けないでしょうか。
お礼
コメント有難うございます。 >このロジックですと 選択項目数<=コンボボックスの数 となっている場合、何も出来なくなってしまうコンボボックスが出来ますね。 確かにそうですね。重複させないことばかりに気をとられてしまっていて気がついていませんでした。 >この場合、「コンボボックスの中身・順番は全て一緒」なのですよね。 だとするとListIndexを比較するだけで済みそうですけど。 この方法で簡単に作ることが出来ました。有難うございます。おかげさまで処理が全然早くなりました。