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

投稿時間:2003/09/11(Thu) 17:52
投稿者名:miya
Eメール:
URL :
タイトル:
ユーザーコントロールについて

環境 Windows98 、VB6(SP4)で作業しています。

ユーザーコントロールについて質問があります。

フォーム内のコンボボックスのListIndexをコード内で設定した場合に、
処理がユーザーコントロールに渡った時点で、ListIndexがクリアされてしまいます。
クリアを回避する方法は、あるでしょうか?

私の説明が、わかりにくいかも知れないので、下記に再現コードを書きます。

事前作業
1.ユーザーコントロールを追加する。
2.ユーザーコントロールにタイマー(Timer1)と
  ラベル(lblClock(0),lblClock(1))を貼りつける。
3.Form1にCombo1とLabel1と、ユーザーコントロールを貼りつける。


コード(Form1)

Private Sub Combo1_Change()
    
    Dim i As Integer
    
    If Len(Combo1.Text) = 5 Then
        For i = 0 To Combo1.ListCount - 1
            If Combo1.List(i) = Combo1.Text Then
                Combo1.ListIndex = i
                Label1.Caption = i
                Exit For
            End If
        Next i
    End If

End Sub

Private Sub Form_Load()

    Combo1.AddItem "test1"
    Combo1.AddItem "test2"
    Combo1.AddItem "test3"

End Sub


コード(ユーザーコントロール)
Private Sub Timer1_Timer()
    lblClock(0) = Format(Now, "yyyy/mm/dd")
    lblClock(1) = Format(Now, "hh:nn:ss")
    
    Form1.Label1.Caption = Form1.Combo1.ListIndex
End Sub

Private Sub UserControl_Show()
    If UserControl.Ambient.UserMode Then
        Timer1.Enabled = True
    End If
End Sub


分かりやすいように、Label1に現在のListIndexを表示するようにしています。

以上の処理を実行すると、コンボボックスのリストから値を設定した場合には、
ListIndexが変わったままになりますが、

手入力で"test2"と入力した場合、Timerイベントが発生した時点で、ListIndexが-1に
クリアされてしまいます。

これは、そういうものなのでしょうか?
それとも回避する方法があるのでしょうか?
ご教授ください。お願いします。

投稿時間:2003/09/11(Thu) 20:03
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: ユーザーコントロールについて
結論から言えば、それはUserConotrolのせいでも、Timerコントロールのせいでもなく、
ComboBox自体の仕様だったりします。

Changeイベント中でListIndexを指定しても、Changeイベント終了後に、
自動的に ListIndex = -1 に補正されてしまうのです。

投稿時間:2003/09/12(Fri) 09:35
投稿者名:miya
Eメール:
URL :
タイトル:
ありがとうございました。
> Changeイベント中でListIndexを指定しても、Changeイベント終了後に、
> 自動的に ListIndex = -1 に補正されてしまうのです。

そうだったのですか!!
そうとは知らず、見当外れな質問をしてしまいました(汗)
でも、これでよくわかりました。
ありがとうございました。