| 投稿時間: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に
 クリアされてしまいます。
 
 これは、そういうものなのでしょうか?
 それとも回避する方法があるのでしょうか?
 ご教授ください。お願いします。
 
 |