VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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に
クリアされてしまいます。

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -