• ベストアンサー

複数のコンボボックスの項目の表示/非表示について(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"がリストに表示されるという様に、同じリストを持つ複数のコンボボックスにおいて、重複選択できないように表示/非表示を切り替えたいのですが上手い方法が思いつきません。分かる方がおられましたら御教授宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.2

このロジックですと 選択項目数<=コンボボックスの数 となっている場合、何も出来なくなってしまうコンボボックスが出来ますね。 ですので私でもpalmmyさんと同じように考えます。 それはともかく、 >If Combo1(i).List(Combo1(i).ListIndex) = Combo1(j).List(Combo1(j).ListIndex) Then... が大変なのは、オブジェクトとそのプロパティに複数回アクセスしているからです。 この場合、「コンボボックスの中身・順番は全て一緒」なのですよね。 だとするとListIndexを比較するだけで済みそうですけど。 というより、そうすべきでしょう。

tattintin
質問者

お礼

コメント有難うございます。 >このロジックですと 選択項目数<=コンボボックスの数 となっている場合、何も出来なくなってしまうコンボボックスが出来ますね。 確かにそうですね。重複させないことばかりに気をとられてしまっていて気がついていませんでした。 >この場合、「コンボボックスの中身・順番は全て一緒」なのですよね。 だとするとListIndexを比較するだけで済みそうですけど。 この方法で簡単に作ることが出来ました。有難うございます。おかげさまで処理が全然早くなりました。

その他の回答 (2)

  • jmh
  • ベストアンサー率23% (71/304)
回答No.3

こんばんわ。 コンボボックスがフォーカスを得た瞬間とかに、選択肢全体から、既に選ばれたものを削除して、現在選択可能なリストを作って、そのコンボボックスのリストを完全に再構築すれば、できるんじゃないかという気がしますが…。 単純に複数選択可能(MultiSelect)なリストボックスじゃダメなんでしょうか? ちなみに、エクセル2000のデータの「並べ替え」のダイアログでは、2つ以上のコンボボックスが同じ値を持つことが過ちであるにもかかわらず、それができます。 Collection の Key は重複できないことを利用すれば、重複選択の検出は簡単にできるような気がします。

tattintin
質問者

お礼

こんばんは、回答有難うございます。 >コンボボックスがフォーカスを得た瞬間とかに、選択肢全体から、既に選ばれたものを削除して、現在選択可能なリストを作って、そのコンボボックスのリストを完全に再構築すれば、できるんじゃないかという気がしますが…。 なるほど、そういうやり方もあるのですね、勉強になりました。さっそく試してはみたのですが、当方初心者でして削除するところまでしか出来ませんでした。もう少し勉強してから再度挑戦しようと思います。

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.1

>上手い方法が思いつきません。 直接の回答ではありませんが、選択後に重複しているかのチェックをして、"すでに選択されています。違う値を選択してください。"とエラーメッセージを表示する方法もあります。

tattintin
質問者

補足

回答有難うございます。 >選択後に重複しているかのチェックをして、"すでに選択されています。違う値を選択してください。"とエラーメッセージを表示する方法もあります。 コメントして頂いた方法でチェックをかける場合に、 For i = 0 To A For j = 0 To B If Combo1(i).List(Combo1(i).ListIndex) = Combo1(j).List(Combo1(j).ListIndex) Then... 上記のような判定方法しか(リストの内容全てについて比較を行い判定)思いつきません。今回使用するリストとコンボボックスの数が多い為、上記の方法だと時間がかかってしまいます。もしもっと良いチェック方法をご存知でしたら御教授して頂けないでしょうか。

関連するQ&A

  • コンボボックス

    コンボボックスから選択した内容によってそれに関するコンボボックスの内容を変えたいと思っています。 例えば コンボボックスA 書類1  分類a 書類2  分類a 書類3  分類b 書類4  分類c コンボボックスB 提出先1  分類a 提出先2  分類b 提出先3  分類b 提出先4  分類c と言う風になっているのですが、 コンボボックスAの書類1を選択したらコンボボックスB と共通の分類の提出先名がコンボボックスに表示したいのです。 書類3を選択すると、コンボボックスBには提出先2、提出先3が表示されるといった感じです。 ACCESS2000を使用しています。 よろしくお願いします。

  • VB2005 コンボボックスのリスト

    csvファイルをdatagridview1に読み込みました。 datagridview1の指定列のデータからコンボボックスに値を追加したいと考えました。 do loop でdatagridview1の行数分リスト追加しました。 コンボボックス.items.add(指定列の内容) 作成されたリストは A A A B B B C C ・・・・・ となりました。 これを A B C にしたいのですが・・・・ どういう方法がよろしいでしょうか?

  • [Access2003]コンボボックスとリストボックスの違い

    今、Access2003のフォームのコントロールの作成について勉強しています。『コンボボックス』と『リストボックス』を見て、コンボボックスは、「ドロップダウン形式でスペースを節約できる点」、リストボックスは、「一覧がすべて表示される」という意味がよく分かりませんでした。 インターネットでいろいろ調べて見たのですが…. 例えば・・・・ 店名ID 店名 A A店 B B店 C C店 と『コンボボックス』と『リストボックス』が表示され、ボックスの上の選択の矢印があるかないかの違いしか分かりませんでした。 (1)Access初心者なので『コンボボックス』と『リストボックス』について簡潔に教えてくださったら助かります。もしホームページで『コンボボックス』と『リストボックス』について一目で見たら違いが分かるというものが掲載されていたら教えてください。 (2)コンボボックスの「ドロップダウン形式」がよく分からないです。

  • VBA コンボボックス リスト表示について

    初心者ですいません エクセル VBAのフォームでコンボボックス3つと、テキストボックス3つがあります シートのListにA~F列までのデータがあり、コンボボックス1にA列のリストを表示し コンボボックス2にA列で選んだリストを参照したB列のリストを表示し、コンボボックス3 にコンボボックス1,2で選んだリストを参照し、C列のリストを表示した後、 コンボボックス1,2,3で選ばれたもののD列、E列分をテキストボックス1,2に 反映しようと思っておりますがうまくいきません どのようにしたらよいか、おしえてください 宜しくお願いします ちなみに、リストの内容は A列   B列   C列     D列   E列 テレビ 42インチ  HDD内蔵  台    100,000 テレビ 32インチ  BD内蔵   台     80,000 テレビ 19インチ          台     50,000 ビデオ HDD   1TB     台    100,000   ビデオ HDD   500GB    台     80,000 ビデオ BD            台     70,000 が、入ってます 希望は、質問の際のカテゴリ選択のようになればよいのですが... さらに、希望を言えば、自動で、行ごとに1,2,3...と番号を振るようにしており スピンボタンで番号を選べば、登録された上記のデータをフォームに反映させるようにしております これもうまくいきません お願いばかりで申し訳ありませんが 宜しくお願いします

  • vb6のコンボボックスの操作について

    おはようございます。 vb6+MDBの環境下で、コンボボックスについて質問です。 マスタとなるテーブルA(都道府県など)と、一般的(?)なデータを日々貯めていくテーブルBがあり、 Bに、Aのキーとなる値が保存されています。 テーブルデータBの表示・更新画面を作っているのですが、 テーブルAの内容を画面上のコンボボックスに選択項目としてADDして表示するところまでは出来たのですが、以下のことを実現するには、コンボボックスにどういう記述で実現するのかわかりません。 1.テーブルBに持っているAの都道府県コードに該当する項目を、Bのデータ選択時に表示したい。 【テーブルA】 Aのキーコード,都道府県名 【テーブルB】 Bのキーコード,Aのキーコード,住所… このような場合、イベント時にコンボボックスをどのように処理するようにソースを書けば実現できますか?

  • ACCESSのコンボボックスについて

    ACCESSでコンボボックスを使っているときに たまに入力できなくなってしまう時があり困っています。 例えばA,B,Cという3つのデータを選択できるコンボボックスがあり、 現在、Aが選択されていてBに変更しようとした時に コンボボックスの表示部分が突然空欄(または選択されているのに表示されていない)になってしまいます。 その後、どれを選択してもコンボボックスには何も表示されなくなってしまいます。 この現象が起こるとなぜか同じフォーム内のボタンなどにも不都合が起こるようになってしまいます。 (テキストボックスのデータを削除するボタンがあるのですがおしてもなにも起こらなくなってしまいました) いろいろ試しているのですが全く原因がわかりません。 どのようなところに原因がありそうかなどあれば教えてください。 宜しくお願いします。

  • MFC コンボボックスを複数扱う

    環境:VC++2008 MFC 同じリストの内容を持つコンボボックスを16個作りたい。(IDC_COMBO1~16) 16個のDDX変数を用意し、16回値を格納するのは綺麗じゃないので1個のDDX変数でなんとかしたいです。 ソースは以下の物で練習しています。 http://www.g-ishihara.com/mfc_cb_01.htm どのようにすれば簡潔にかけるでしょうか?

  • エクセルのコンボボックスについて

    シート「データ」に   A  B 1 い  東京 2 ろ  千葉 3 は  埼玉 上記内容が記載されています。 それを別のシートで参照できるようにリストを作って入力規則でコンボボックスを作りました。 しかし、コンボボックスには選択肢がひとつしか表示されません。 「い、ろ、は」だけが表示されています。 でも本当は「東京、千葉、埼玉」をコンボボックスで表示し、セルには「い、ろ、は」のどれかを表示するようにしたいのです。 これをマクロを使わないでできるでしょうか?

  • ExcelVBA コンボボックスリストのリセット

    4月からマクロを勉強し始めて、壁にぶつかっています。 ユーザーフォームでオプションボタンの下にコンボボックス(1)を、そのさらに下にもうひとつコンボボックス(2)をレイアウトしました。 コンボボックス(1)は選ばれたオプションボタンによって、異なるリストを表示させるようにしてあります。 わからないのは、コンボボックス(2)のリストをコンボボックス(1)で選ばれた文字によって変えたいのです。 たとえば、コンボボックス(1)で"A"と選択されたら、コンボボックス(2)にはリストA'が、(1)で"B"と選択されたら、(2)にはりすとB'が…、というように、場合分けさせたいのです。 方法をご存知の方がいらっしゃいましたら、ご教示ください。よろしくお願いいたします。

  • 複数のコンボボックスをforなどで扱う方法

    VIsualC++6.0 SDI でプログラムの勉強をしています。 コンボボックス1 コンボボックス2 コンボボックス3   ・   ・ のようなダイアログボックスがあり、 コンボボックスについては、一個一個メンバ変数を割り当て、初期化をしています。 m_combo1.SetCurSel(0); m_combo2.SetCurSel(1); m_combo3.SetCurSel(2); これを、for(int i=0; i < n; i++){ のような繰り返し文を使って書にはどうやったらよいのでしょうか? また他に方法があったり、考え方が根本的に違っているようならご指摘ください。 一先ず、初期化は一個一個書いて終わらせたのですが、 実際の処理では、複数あるコンボボックスのデータを順々に送信する。 送信し終ったらまたコンボボックス1のデータを送信・・・。 と、ストップボタンを押してスレッドを抜けるまで送信し続けると言う処理をさせたいのですが、 初期化のように出来ないため、質問させて頂きました。 よろしくお願いします。

専門家に質問してみよう