同一ユーザフォーム上のコントロール(今回はプログレスバー)をコンボボックスの値によって表示させたり非表示にさせるコードを書いている。
コンボボックスのChange EventハンドラでコントロールのVisibleをTrueにしたりFalseにしているんだけど、上手くいかない。
Falseにしたときには消えるのに、Trueにしても消えたままで表示されない。
イベントが発生してないのかと思いブレークを張ってみるとTrueのときもFalseのときもちゃんとブレークする。
フォームを画面の外に移動して、元に戻すと画面から出た部分のプログレスバーは表示されることがわかった。
どうやら、フォームを再表示すれば問題は解決しそうだ。
で、フォームのプロパティを調べてみるとRepaintというメソッドを発見した。
オブジェクトを再描画してくれると書いてある。
早速、コードに追加すると思い通り、表示してくれるようになった。
Private Sub ComboBox1_Change()
If ComboBox1.List(ComboBox1.ListIndex) = "ほなゃらら" Then
ProgressBar1.Visible = True
UserForm1.Repaint ' <-これがみそ
Else
ProgressBar1.Visible = False
End If
End Sub
--
はれ
Nessun commento:
Posta un commento