C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: PictureBoxの描画更新タイミングに関して


(過去ログ 11 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■2312 / inTopicNo.1)  PictureBoxの描画更新タイミングに関して
  
□投稿者/ DD. (1回)-(2007/03/31(Sat) 12:59:47)

分類:[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つの画像ファイルに関連のある複数の絵が含まれているため
描画時には転送元座標を指定したいからです。

以上、他に情報が必要であればご指摘下さい。

よろしくお願い致します。

引用返信 編集キー/
■2313 / inTopicNo.2)  Re[1]: PictureBoxの描画更新タイミングに関して
□投稿者/ はつね (118回)-(2007/03/31(Sat) 15:03:48)
はつね さんの Web サイト
No2312 (DD. さん) に返信
> 現在、カレンダーアプリを作成しようとしており、
> 日描画部分を、Panelコンテナの中にPictureBoxを42個ほど貼り付けて使用しています。

PanelにPictureBoxコントロールを42個もはりつけるよりは、画像が表示できる表コントロールなどを採用したいところですね。
DataGridViewでもImageが表示できるようですが、それだと希望したものができないのでしょうか。

引用返信 編集キー/
■2314 / inTopicNo.3)  Re[2]: PictureBoxの描画更新タイミングに関して
□投稿者/ DD. (2回)-(2007/03/31(Sat) 15:11:44)
No2313 (はつね さん) に返信
> ■No2312 (DD. さん) に返信
>>現在、カレンダーアプリを作成しようとしており、
>>日描画部分を、Panelコンテナの中にPictureBoxを42個ほど貼り付けて使用しています。
>
> PanelにPictureBoxコントロールを42個もはりつけるよりは、画像が表示できる表コントロールなどを採用したいところですね。
> DataGridViewでもImageが表示できるようですが、それだと希望したものができないのでしょうか。
>
引用返信 編集キー/
■2315 / inTopicNo.4)  Re[2]: PictureBoxの描画更新タイミングに関して
□投稿者/ DD. (3回)-(2007/03/31(Sat) 15:16:24)
No2313 (はつね さん) に返信

すいません。一つ上のレスでは返信内容がないまま送信してしまいました。
無視してください。

> ■No2312 (DD. さん) に返信
> PanelにPictureBoxコントロールを42個もはりつけるよりは、画像が表示できる表コントロールなどを採用したいところですね。
> DataGridViewでもImageが表示できるようですが、それだと希望したものができないのでしょうか。
別手法でよりよく実現できるのであれば問題ないです。
ただ、私がどんなコントロールが存在して、どのようなことができるのかあまり理解していないだけで・・・

別にベターな手法があるのであればそれに置き換えることは可能であります。
ただ、よろしければ今後のためにも本題の件、ご教授も頂ければうれしい限りです。

よろしくお願い致します。

引用返信 編集キー/
■2318 / inTopicNo.5)  Re[3]: PictureBoxの描画更新タイミングに関して
□投稿者/ よねKEN (27回)-(2007/03/31(Sat) 17:29:59)
よねKEN さんの Web サイト
UserControlを継承したクラスを作ってはどうでしょうか。
カレンダーの内容は自前で描画しますので自由度は高いです。
#単に表示するカレンダーではなく、日付を選択して何かするようなものを目指しているのであれば、
#この方法が必ずしもベストではないですが。

昔に作ったものなので今見直すといまいちな部分のあるサンプルですが、
カレンダーを独自描画するサンプルを掲載しています↓

http://www5b.biglobe.ne.jp/~yone-ken/VBNET/
サンプル - カレンダー

よかったら参考にしてください。

引用返信 編集キー/
■2319 / inTopicNo.6)  Re[4]: PictureBoxの描画更新タイミングに関して
□投稿者/ DD. (4回)-(2007/03/31(Sat) 18:19:39)
No2318 (よねKEN さん) に返信
> 昔に作ったものなので今見直すといまいちな部分のあるサンプルですが、
> カレンダーを独自描画するサンプルを掲載しています↓
> よかったら参考にしてください。
ありがとうございます。

ぜひ参考にさせていただきたいと思います。

引用返信 編集キー/
■2320 / inTopicNo.7)  Re[4]: PictureBoxの描画更新タイミングに関して
□投稿者/ じゃんぬねっと (401回)-(2007/03/31(Sat) 22:37:45)
じゃんぬねっと さんの Web サイト
No2318 (よねKEN さん) に返信
> 昔に作ったものなので今見直すといまいちな部分のあるサンプルですが、
> カレンダーを独自描画するサンプルを掲載しています↓
>
> http://www5b.biglobe.ne.jp/~yone-ken/VBNET/
> サンプル - カレンダー

よね KEN さんも wankuma.com に移ってこればいいのに... (^^)
引用返信 編集キー/
■2335 / inTopicNo.8)  Re[1]: PictureBoxの描画更新タイミングに関して
□投稿者/ DD. (5回)-(2007/04/03(Tue) 09:53:04)
> @FormのOnPaint()をオーバーライドし、描画処理記述。
>  →FormのOnPaint()後にPictureBoxの再描画処理が走る?ため上書きされるから?
Invalidate()を入れると正しく描画がされました。

様々な意見を下さった方ありがとうございます。
色々参考にして違う方向でも作成をしてみたいと思います。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -