好ましからざる人物

ユーザフォーム上のコントロールの再表示

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