2016-06-21 48 views
-1

次のコードを使用してテキストボックスを作成しましたが、テキストボックスのどのような状況でも、ペイントメソッドは起動されません。 OnPaint()をトリガーするソリューションを提案できますか?あなたのOnPaintTextBox OnPaintメソッドが呼び出されていませんか?

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    ControlPaint.DrawBorder(e.Graphics, this.Bounds, Color.Red, ButtonBorderStyle.Solid); 
} 

base.OnPaint()で通話を切り替える必要があり

public class MyTextBox : TextBox 
{ 
    protected override void OnPaintBackground(PaintEventArgs pevent) 
    { 
     base.OnPaintBackground(pevent); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     ControlPaint.DrawBorder(e.Graphics,this.Bounds, Color.Red,ButtonBorderStyle.Solid); 
     base.OnPaint(e); 
    } 

    protected override void OnTextChanged(EventArgs e) 
    { 
     this.Invalidate(); 
     this.Refresh(); 
     base.OnTextChanged(e); 
    } 
} 
+2

ヒットしていないことをデバッグしましたか?あなたの 'DrawBorder'呼び出しは' base.OnPaint() '_after_を呼び出しているので、役に立たないかもしれません。だから、 'TextBox'は以前に描いたものを再び描画します。 –

答えて

3

は、いつものようにTextBoxを描画します。 DrawBorderの前に呼び出すと、baseコールは、ベース実装によって再度オーバーペイントされます。


しかしMSDNによると、PaintイベントがTextBoxによってサポートされていません。

このAPIは、製品インフラストラクチャをサポートします。コードから直接使用するためのものではありません。
コントロールが再描画されたときに発生します。このイベントはこのクラスには関係ありません。

だから、Ben Jackonの答えがその問題を解決するはずです。

SetStyle(ControlStyles.UserPaint, true); 

例えば:あなたは自己塗装コントロールとして登録していない限り

+0

それは大丈夫です。私はOnPaintメソッドを打つことを求めています。 –

+0

私は、OnPaintメソッドをトリガーするように頼んでいます。このメソッドがトリガーされなかったためです。 –

+0

@VenkateshKs大丈夫、ベンは答えを得た。コールオーダーがコード内の関連する問題であるため、私はこの投稿を残します。 –

8

のOnPaintはへの呼び出しを行うことによって、デフォルトではテキストボックスで呼び出されることはありませんあなたのMyTextBoxコンストラクタから。

+0

ありがとうございました。その働き。 –

+4

@VenkateshKsこれがあなたの質問に答えた場合は、それを同様の質問を持つ将来のユーザーを助けるための答えとしてください。 –

関連する問題