|
分類:[C# (Windows)]
DD.と申します。
環境はXP+VS2005になります。
現在、カレンダーアプリを作成しようとしており、 日描画部分を、Panelコンテナの中にPictureBoxを42個ほど貼り付けて使用しています。
その際の日描画部を Panel.GetNextControl()を用いてPanelコンテナ上のPictureBoxを順に取得し、 取得したPictureBoxからCreateGraphics()でGraphicsインスタンスを取得してから、DrawImage()を行っています。
ただ、この日描画処理をどこで行うかで困っております。 ご質問したい点は描画処理をどこに置くべきなのか?です。
C#でもウィンドウフォームアプリ作成に関する知識が薄く、 どのように行うのが常套であるのか理解していないため、私の考えがおかしければご指摘も頂きたいと思います。
私が描画処理を置いてうまくいかなかったパターンを以下に記述致します。 @FormのOnPaint()をオーバーライドし、描画処理記述。 →FormのOnPaint()後にPictureBoxの再描画処理が走る?ため上書きされるから? APanelのPaintEventを追加し、描画処理記述。 →Panelの再描画後にPictureBoxの再描画処理が走る?ため上書きされるから? B42個あるPictureBoxの内の"1つだけ"にPaintEventを追加し、再描画処理記述。 →うまくいくときもあるが、うまくいかないときもある。 上記の"1つだけ"がコンテナからみた何番目のWidgetなのかにもよりそう。
※上記のBを各PictureBoxに対してPaintEventを追加して、 そこに各描画処理を入れるのはナンセンスであると思うので避けたいです。 それに、それではせっかくPictureBoxをコンテナに詰め込み、 GetNextControl()が扱えることの意味がないようにも感じます。 #それが普通であるのかはわかりません。。。
また、この件に関連するかはわかりませんが、 CreateGraphics()を用いる理由としては、DrawImageをPaintEvent以外で使用したいためであり、(PaintEvent以外で使用したいのは上記※の通りです) DrawImageを用いる理由は、1つの画像ファイルに関連のある複数の絵が含まれているため 描画時には転送元座標を指定したいからです。
以上、他に情報が必要であればご指摘下さい。
よろしくお願い致します。
|