• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c# OnPaintメソッドが呼び出されない原因)

c#のOnPaintメソッドが呼び出されない原因とは?

このQ&Aのポイント
  • c#初心者がコントロールで描画を行う際、OnPaintメソッドが呼び出されない問題に遭遇しました。
  • 通常はControlクラスのTextプロパティに異なる値を設定するとOnPaintメソッドが呼ばれますが、特定の条件下では呼ばれないことがあります。
  • OnPaintメソッドを必ず呼びたい場合にはRefreshメソッドを利用することもできますが、原因を突き止めたいと考えています。ご意見やアドバイスをお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#159825
noname#159825
回答No.2

ANo1 です。 Text プロパティの変更 => WM_PAINT の発生といえば確実に実装されていると思われるテキストボックスかと思いました。ボタンとか?まぁ、この際さほど関係ないんですが・・・。 どちらにせよTextChange ハンドラでInvalidate を呼ぶのが普通な気がします。重複してOnPaint よばれないし。

koumei000
質問者

お礼

 結局、対処療法的処置になりましたが、今回はこれで妥協します。回答ありがとうございました。

その他の回答 (1)

noname#159825
noname#159825
回答No.1

onpaint が呼ばれない時。textbox が画面に表示されてない時とか?つまり別のウィンドウの背後に隠れているときとか。 まぁRefresh ではなくInvalidate を使いますよね。OnPaint が呼ばれるタイミングはWindows の描画タイミングに由来するので。 まぁテキストボックスのようなコントロールのオーナードローは、別にプロパティを設定しないといけないとか、そんなのもあった気がします。

koumei000
質問者

お礼

 回答ありがとうございます。 > textbox が画面に表示されてない時とか? > つまり別のウィンドウの背後に隠れているときとか。 ・画面上に表示されている(画面内かつ上に何も覆われてない)、の前提条件があります。 > まぁRefresh ではなくInvalidate を使いますよね。  そういえば、そんなのもありました。  それと、テキストボックスの単語が目立つのですが、テキストボックスとは言っていませんよ? 分かってらっしゃるなら問題ありませんが(ちなみに大半はControlからの継承です)。

関連するQ&A