DOBON.NET DOBON.NETプログラミング掲示板過去ログ

カスタムコントロールの再描画について

環境/言語:[XP .NET1.1 VB.NET]
分類:[.NET]

VB.NETでカスタムコントロール作りに挑戦しています

TextBoxを継承したクラスでフォーカス時のみBorderColorを青くして、
BackColorをレモン色に
フォーカスがない場合はBorder設定しない、BaclColorも白に戻す
というふうにしたいのですが

Public Class TextBoxTest
Inherits TextBox

Dim g As Graphics = CreateGraphics()

Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)

g.DrawLine(Pens.Black, 2, 2, 30, 30)
Me.BackColor = Color.LemonChiffon
Me.Refresh()

End Sub

Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
Me.BackColor = Color.White
Me.Refresh()
End Sub

End class

BackColorは変更できたのですが、DrawLineで描画した線が一瞬で消えてしまいます
TexbBoxのOnPaint、OnPaintBackgroundもオーバーライドしてみたのですが通らない
ようです。親コントロールから描画しようとしてもNewコントラクタ内で
Me.Parent,Mybase.ParentはNothingが返ってきます

描画のコードをどのプロシージャに置けば再描画してくれるのでしょうか?
> TexbBoxのOnPaint、OnPaintBackgroundもオーバーライドしてみたのですが通らない
> ようです。

OnPaintが通らないというのは、呼び出されないということでしょうか?そうであれば、コンストラクタあたりで、

Me.SetStyle(ControlStyles.UserPaint, True)

としてください。
できました、ありがとうございます
ただ、テキストボックスの内側に描画する事になるのでちょっと見栄えが
悪くなってしまいますね。
InputManのような縁取りにするには親コントロールからコントロールの外側を
描画したほうがよさそうです。
カスタムコントロールではNewする時に親コンテナの取得ができないので無理
ですが、自作のクラスでなんとかなりました。

DOBON.NET | プログラミング道 | プログラミング掲示板