VB5.0
コンボボックスで設定はドロップダウンリストで、コンボボックスは
アクセスのテーブルリストより参照しております
combo1
combo2
combo3
combo1 combo2 combo3
01哺乳類→01人間→01黒人
→02白人
→02鯨 →03ザトウ鯨
→04ミンククジラ
→03猿
02鳥類 →04カラス
→05インコ
→06スズメ
03両生類→07トカゲ
→08イモリ
上記の様にレベルによって、選択出来るようにしようと考えております。
その際、combo3を選んだ際に
combo2、combo1を自動的にコンボボックスの初期値を設定したい場合は、
どの様にしたらよいでしょうか??
値の取得は出来たのですが、combo1.text=****
を入れても出来ません。何卒ご教授お願い致します。
ListIndexを0にすると一覧の最初の項目を表示します。
人種差別は良くないよね,こんなソフトアメリカで出したら大変なことに・・・
それと分類がおかしいような、鯨の並びはカラス、トカゲでは?
カラスの下に深山カラスとか海カラスとか、トカゲの下にコモドトカガとかオオトカゲが。
まあ分類が出来たとして、各項目に親子関係をつける必要が有るのでは、
鯨の親は哺乳類、ザトウ鯨の親は鯨とか、それで項目がクリックされたら、
上のComboBoxのテキストはクリックされた項目の親の項目をセットして、
下のComboBoxは選択された項目を親に持つ子供の先頭をテキストにセットするとか。
やらんとしていることは何となくわかりますが、これならコンボボックスじゃなくてツリービューの方がいいのではないかと
それか、コンボボックスを親、子、孫にわけて3つ用意し、親を選んだ時点で子の内容を設定し、子を選んだら孫の内容を…とした方がいい気がします
あ、ゴメンなさい
既に親、子、孫のコンボボックスを用意しておく仕組みになってたんですね
でしたら、上で書いた
>>親を選んだ時点で子の内容を設定し、子を選んだら孫の内容を…とした方がいい気がします
でいいかと思います
combo.ListIndex = combo.NewIndex
を入れる事によって無事、標準値を入れる事が出来ました。
ただ、コンボ1,2,3は、それぞ、れコンボ1_Clickにしている為、
ListIndexで標準値を設定してしまうと、初期値が入ったコンボのClickの処理が
走ってしまいます。
この様な場合、表示のみをして、clickの処理をしない方法はありますでしょうか??
説明が分かりにくいかとは思いますが、何卒よろしくお願い致します
PS、例題
ps.一部、例題で人種差別とご指摘されましたが、
確かに、そうとられて当然の表現でした。申し訳ございませんでした。
Form_Loadで初期設定をしているのなら、
Private Sub Combo1_Click()
If Me.Visible = False Then Exit Sub
以下処理
End Sub
としておけば、初期設定時にはCombo1のクリックイベントは発生しないと思います
上記
If Me.Visible = False Then Exit Sub
では、Visibleは通常はtrueですので、常にexit subしてしまい、
目的とは異なるのですが・・・
vb初心者の為、申し訳ございません。
If Me.Visible = False Then Exit Sub
は
If Me.Visible = False Then
Exit Sub
End If
と同義です
いな様、早速のご回答ありがとうございます!
If Me.Visible = False Then
Exit Sub
End If
は存じておりますが、Visible は実行時にコンボボックス自体を隠してしまうプロパティですよね??
何故、上記の中にプログラムを書く事によって、クリックイベントが発生しないのか、理解が出来ないのです><
よろしくお願い致します。
え〜と解説します。
FormのLoadが修了されていない。
⇒各コントロールは、表示されていない。
⇒表示されていない。つまりVisible=False
FormのLoadが修了する。
⇒各コントロールは、表示されている。
⇒表示いる。つまりVisible=True
よって
FormのLoadが完了しない ⇒ Visible=False
FormのLoadが完了 ⇒ Visible=True
>コンボボックス自体を隠してしまうプロパティ
隠してしまうプロパティというよりは、
隠れているときにはFalse
表示されているときにはTrueを返すプロパティと考えると分かるかも
いな様、早速のご回答ありがとうございます!
Form load の中ではtimerを走らす処理を書いていますので、
早速初期値を Visible=False にし、timer の中でVisible=trueにしました。
しかし、何故これでクリックイベントが発生しなくなるのでしょうか??
何度考えても理解出来ないのです。
1.Visible = False
2.初期値セット
3.クリックイベント発生、
しかし、Visible = Falseのため Exit Sub
4.Timerの中でVisible = True
5.Form Load 完了
ってことですが、どういった点で腑に落ちない?
1.Visible = False
2.初期値セット
3.クリックイベント発生、
しかし、Visible = Falseのため Exit Sub
4.Timerの中でVisible = True
5.Form Load 完了
上記は確かに理解出来るのですが、
Form load完了後、通常にコンボを選択する事も出来ます。
ここまではOKなのですが、
例えば、
combo1 combo2 combo3
01哺乳類→01人間→01黒人
combo3を選択した場合には、自動的にコンボ1、2には
哺乳類、人間と初期値が入る様にしたいのですが、この場合に、
初期値が入った瞬間にクリックイベントが発生してしまいます。
その際、コンボ1のクリックでは、01の哺乳類が選択された場合は
コンボ2はそれに対応するコンボのみを表示させたいと思っております。
この場合もクリックイベントが発生してしまい、無限のループに入ってしまいます><
勉強不足で本当に申し訳ございません。
素直にフラグ変数を用意しておいて
・初期値を入れる前にTRUE
・初期値を入れ終わった後にFALSE
・クリックイベント先頭でフラグ変数がTRUEだったら処理せずに抜ける
では駄目?
皆様、丁寧なご回答ありがとうございました。
みい様にご指導頂いた方法で、無事問題が解決致しました。
フラグ変数、今後使う機会が増えそうです。
また、今回初めてBBSを使用させて頂いたのですが、
皆様のレスの速さにはビックリ致しました。
本当にありがとうございました。
ツイート | ![]() |