同一ユーザフォーム上のコントロール(今回はプログレスバー)をコンボボックスの値によって表示させたり非表示にさせるコードを書いている。 コンボボックスの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
--
はれ
No comments:
Post a Comment