[リストへもどる]
一括表示

投稿時間:2004/02/02(Mon) 19:36
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
コンボボックスのイベント
すいません、お願い致します。
フォームに、コンボボックスをStyle = 2 で作成し、
そのコンボボックスにClickイベントを付けました。

上記の場合、そのコンボボックスを文字通り「クリック」して
値を選択しても、イベントは起こりますし、
他のプロシージャで、そのコンボボックスの値を
(Combo1.Text = "AAA")変更してもイベントは起こります。

これを、文字通り「クリック」した時だけ、イベント認識
させることは出来るのでしょうか?
よろしくお願い致します。
以上

投稿時間:2004/02/02(Mon) 23:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: コンボボックスのイベント
> そのコンボボックスにClickイベントを付けました。
標準でついている以外に作成されたのですか?

> 他のプロシージャで、そのコンボボックスの値を
> (Combo1.Text = "AAA")変更してもイベントは起こります。

Combo1.Text = "AAA" には値を設定できないと思うのですが。

テストして見ましたが、イベントは発生しておりません。

Private Sub Combo1_Click()
    MsgBox "イベントが発生しました"
End Sub

Private Sub Command1_Click()
    'Combo1.Text = "abcd"    '値を設定できません。
    Combo1.List(1) = "abcd"
End Sub

Private Sub Form_Load()
    Combo1.AddItem "a"
    Combo1.AddItem "b"
    Combo1.AddItem "c"
'    Combo1.Style = 2
End Sub

Windows98 SE  VB6.0(SP5)
WindowsXP   VB6.0(SP5)

で確認しました。 
サービスパックを確認して見て下さい SP4 以前じゃないですか?

現象を再現できるコードを投稿して見て下さい。

投稿時間:2004/02/03(Tue) 02:44
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: コンボボックスのイベント
> Combo1.Text = "AAA" には値を設定できないと思うのですが。

実は Style = vbComboDropdownList の場合も、限定的に設定可能なのです。>花ちゃんさん
  Combo1.AddItem "AAA"
  Combo1.AddItem "BBB"
  Combo1.AddItem "CCC"
  Combo1.Text = "BBB"   'これはOK
  Combo1.Text = "DDD"   'これはNG

この場合、どうしても Clickイベントは発生します。>ゆーみんさん
フラグ変数などを立てるなどして、ロジックで逃げてください。

--------
ちなみに、Textプロパティではなく、ListIndexプロパティを使って指定した場合は、
選択項目が「変更」されない限り、Clickイベントは発生しません。

つまり、
   .ListIndex = 0
   .ListIndex = 3   '0→3に「変更」されたので、Clickイベント発生
   .ListIndex = 3   '3のままなので、Clickイベントは発生しない
となります。

投稿時間:2004/02/03(Tue) 13:23
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
Re^3: コンボボックスのイベント
花ちゃん様、魔界の仮面弁士様、ご返答有難う御座います。
色々と参考にさせて頂いた案でやってはいるのですが、
自分のやりたい事ができません。
もう少しお知恵をお借りできますでしょうか?

配置:
フォームにComboを配列で(0)と(1)で作成
どちらのコンボもStyle2で作成

リスト:
Combo(0)には「ALL,野球,水泳」と3項目をAdditem
Combo(1)には「ALL,バット,ボール,水着,ゴーグル」と5項目をAdditem
フォームロード時に上記をそれぞれにAdditemします。
また、初期値はそれぞれ「ALL」とします。

やりたい事:
Combo(0)で野球をクリックしたら、Combo(1)には「ALL,バット,ボール」
のみリスト表示(つまり水着とゴーグルが無くなる)
Combo(0)で水泳をクリックしたら、Combo(1)には「ALL,水着,ゴーグル」
のみリスト表示(つまりバットとボールが無くなる)
Combo(0)でALLをクリックしたら、Combo(1)には「ALL,バット,ボール,
水着,ゴーグル」と初期状態へ。
また、
Combo(1)の方で、バットやボールをクリックしたらCombo(0)は野球が
選択された状態としたいのです。(水泳も同様)

現在の記述:
Private Sub Combo_Click(index As Integer)
  If index = 0 Then
    Combo(1).Clear
    Combo(1).AddItem "ALL"
      If Combo(0).Text = "野球" Then
        Combo(1).AddItem "バット"
        Combo(1).AddItem "ボール"
      ElseIf Combo(0).Text = "水泳" Then
        Combo(1).AddItem "水着"
        Combo(1).AddItem "ゴーグル"
      End If
  Else
    If Combo(1).Text = "バット" Or Combo(1).Text = "ボール" Then
      Combo(0).Text = "野球"
    ElseIf Combo(1).Text = "水着" Or Combo(1).Text = "ゴーグル" Then
      Combo(0).Text = "水泳"
    End If
  End If
End SUb

「ALL」をクリックした時の処理は抜いてありますが、
結局、Combo(1)をクリックして、バットにした場合、Combo(0)は野球になります。
で、Combo(0)が変更されたので、またイベントが働き「Combo(1)がクリア」されます。
そうすると、クリックしたはずの「バット」が未選択となります。
これを「バットが選択された状態」で残したいのです。

できますでしょうか?

投稿時間:2004/02/03(Tue) 15:55
投稿者名:隼人
Eメール:
URL :
タイトル:
Re^4: コンボボックスのイベント
私ならば、次のようにしますね。
# ハマると、結構むずかしいですよね。

Private Sub Combo_Click(Index As Integer)
  Static flg As Boolean
  Select Case Index
    Case 0
      '* flg = True の時は、イベント処理を無視
      If flg = True Then Exit Sub
      Combo(1).Clear
      Combo(1).AddItem "ALL"
      Select Case Combo(0).Text
        Case "野球"
          Combo(1).AddItem "バット"
          Combo(1).AddItem "ボール"
        Case "水泳"
          Combo(1).AddItem "水着"
          Combo(1).AddItem "ゴーグル"
      End Select
    Case 1
      flg = True  '* 以下で Combo(0) を変更した時に発生する Combo_Click(0)
                  '  イベントを無視する為、 flg = True に設定
      Select Case Combo(1).Text
        Case "バット", "ボール"
          Combo(0).Text = "野球"
        Case "水着", "ゴーグル"
          Combo(0).Text = "水泳"
      End Select
      flg = False '* flg を元に戻す
  End Select
End Sub

投稿時間:2004/02/03(Tue) 23:18
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
解決: コンボボックスのイベント
隼人様、有難う御座います。
大変参考になりました。

そうですね。考えているうちに、どんどん逆に
混乱してしまっていました。

有難う御座いました。

投稿時間:2004/02/06(Fri) 11:26
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
Re^5: コンボボックスのイベント
すいません、解決したかと思ったのですが、
一つ疑問がありますので、再度ご質問させて
頂きます。

隼人様のコードにした場合
(何もComboを触らないで、フォーム起動時に下記のことがら
をした場合)
1.Combo(1)で「水着」を選択するとCombo(0)のテキストは
「水泳」に変わり、Combo(1)のリストを再度見ると、
「バット、ボール、水着、ゴーグル」と残っています。

2.Combo(0)を「クリック」して水泳に変えた場合Combo(1)の
リストは「水着、ゴーグル」のみとなります。

これを、「1.」の場合もCombo(1)のリストを「水着、ゴーグル」
のみにすることは出来るでしょうか?
(さらに選択した「水着」が選ばれている状態)
つまり、Combo(1)でクリックしたら、Combo(0)のテキストを変え、
さらに「Combo(1)をまたCombo(0)のテキストにあうようにリスト
内容を変更する」ようなことは出来るのでしょうか?

よろしくお願い致します。

投稿時間:2004/02/06(Fri) 16:08
投稿者名:隼人
Eメール:
URL :
タイトル:
Re^6: コンボボックスのイベント
# うぉぉっ、やっぱりハマってる (ToT)

下のような感じではどうでしょう...

Private Sub Combo1_Click(Index As Integer)
  Static flg As Boolean
  Dim sTemp As String
  Select Case Index
    Case 0
      Combo1(1).Clear
      Combo1(1).AddItem "ALL"
      Select Case Combo1(0).Text
        Case "野球"
          Combo1(1).AddItem "バット"
          Combo1(1).AddItem "ボール"
        Case "水泳"
          Combo1(1).AddItem "水着"
          Combo1(1).AddItem "ゴーグル"
      End Select
    Case 1
      If flg = True Then Exit Sub '* flg = True の時は、イベントを無視
      
      sTemp = Combo1(1).Text  '* 後で、選択項目を戻す為、変数に退避
      
      Select Case sTemp
        Case "バット", "ボール"
          Combo1(0).Text = "野球" '* Combo1_Click(0) イベントを発生させる
                                  '  Combo1(1).Text は未選択の状態になる
        Case "水着", "ゴーグル"
          Combo1(0).Text = "水泳" '* Combo1_Click(0) イベントを発生させる
                                  '  Combo1(1).Text は未選択の状態になる
      End Select
      
      flg = True  '* 以下で Combo1(1).Text を変更した時に発生する Combo1_Click(1)
      '           '  イベントを無視する為、 flg = True に設定
      
      Combo1(1).Text = sTemp  '* 上記で未選択の状態になって
                              '  しまった Combo1(1).Text を再度選択状態にする。
      
      flg = False '* flg を元に戻す
  End Select
End Sub

投稿時間:2004/02/10(Tue) 23:17
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
解決: コンボボックスのイベント
隼人様、色々と有難うございます。
解決です。
助かりました。