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

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

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

Re[11]: Panel に線描画で表作成したときのスクロールバー


(過去ログ 50 を表示中)

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

■27255 / inTopicNo.1)  Panel に線描画で表作成したときのスクロールバー
  
□投稿者/ Sai (1回)-(2008/10/31(Fri) 14:56:52)

分類:[C#] 

いつも参考にさせて頂いてます。

Formに張り付いたPanel に線描画で表作成した時、PanelのAutoScrollをTrueに設定しましたが、
Panel のサイズを超える表を描画してもスクロールバーが現れなかったのですが、
どの様にしてPanelのサイズを超える表を表示させたらよいかご教示お願いします。

使用環境は、WindowsXP で Visual C# 2008 Express Edition です。

簡単ではありますが、テストで作成した表を付けておきます。

private void button1_Click(object sender, EventArgs e)
{
//Graphicsオブジェクトの作成
Graphics g = panel2.CreateGraphics();

//Penオブジェクトの作成
Pen p = new Pen(Color.FromArgb(0xc0, 0xc0, 0xff), 10);
//線描画
g.DrawLine(p, 120, 25, 240, 25);
      //色の変更
p = new Pen(Color.FromArgb(0xff, 0xe0, 0xc0), 10);
//線描画
g.DrawLine(p, 180, 35, 360, 35);

//Penオブジェクトの作成(幅1黒色)
p = new Pen(Color.Black, 1);

//フォントオブジェクトの作成
Font fnt = new Font("MS Pゴシック", 9);
//色を塗る
g.FillRectangle(Brushes.LightYellow, 240, 0, 120, 20);
//横線を引く
g.DrawLine(p, 0, 0, 619,0 );
g.DrawLine(p, 0, 149, 619, 149);
g.DrawLine(p, 0, 20, 619, 20 );
g.DrawLine(p, 0, 40, 619, 40);
g.DrawLine(p, 0, 60, 619, 60 );
g.DrawLine(p, 0, 80, 619, 80);
//縦線を引く
g.DrawLine(p, 0, 0, 0,149 );
g.DrawLine(p, 619, 0, 619, 149);
g.DrawLine(p, 60, 0, 60,149 );
g.DrawLine(p, 120, 0, 120, 149);
g.DrawLine(p, 240, 0, 240,149 );
g.DrawLine(p, 360, 0, 360, 149);
//文字列を位置(0,0)、青色で表示
g.DrawString("担当者", fnt, Brushes.Blue, 245, 5);

//リソースを開放する
p.Dispose();
g.Dispose();
    }
引用返信 編集キー/
■27256 / inTopicNo.2)  Re[1]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ みきぬ (193回)-(2008/10/31(Fri) 15:24:34)
Panel.AutoScrollMinSize プロパティをいじればいいんじゃないかなと。
引用返信 編集キー/
■27258 / inTopicNo.3)  Re[2]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ Sai (2回)-(2008/10/31(Fri) 15:34:28)
No27256 (みきぬ さん) に返信
> Panel.AutoScrollMinSize プロパティをいじればいいんじゃないかなと。

早速こご回答ありがとう御座います。

スクロールの件は、解決しましたが新たな問題が発生しました。
スクロールして画面から消えた後、元に戻ると描画が消えてしまいます。
この描画が消えなくする方法はありますか?
本当にC#は素人で申し訳ありませんがご教示お願いします。
引用返信 編集キー/
■27261 / inTopicNo.4)  Re[3]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ みきぬ (194回)-(2008/10/31(Fri) 16:43:14)
No27258 (Sai さん) に返信
> スクロールの件は、解決しましたが新たな問題が発生しました。
> スクロールして画面から消えた後、元に戻ると描画が消えてしまいます。
> この描画が消えなくする方法はありますか?
> 本当にC#は素人で申し訳ありませんがご教示お願いします。

消えなくするというのであれば、Panel.Paint イベントを処理するメソッドを用意し、描画処理をそこへ移動させればよいです。
Graphicsオブジェクトは、イベント処理のパラメータ(PaintEventArgs e)を使って e.Graphics で取得できます。
ただこれだと「ボタンを押したときに描画」ができませんので、表を描画するためのコントロールを別途用意したほうがいいのかなと思います。

例えば PictureBox を用意して、PictureBox.Paint イベント処理で表を描画するようにします。
ボタンを押したときに、PictureBox を Panel の中に配置することで、現在と変わらない動きになると思います。
またそのようにすることで、Panel.AutoScrollMinSize を設定しなくても、PictureBox を適切なサイズにするだけでスクロールが実現できます。

このあたりも参考になると思います。
http://www.atmarkit.co.jp/fdotnet/dotnettips/458picboxdraw/picboxdraw.html
引用返信 編集キー/
■27262 / inTopicNo.5)  Re[3]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ やじゅ (739回)-(2008/10/31(Fri) 16:44:12)
やじゅ さんの Web サイト
No27258 (Sai さん) に返信
> スクロールして画面から消えた後、元に戻ると描画が消えてしまいます。
> この描画が消えなくする方法はありますか?

描画はPaintイベントで行うようにする。
button1_Clickでは、Paintイベントを呼ぶだけにする。

引用返信 編集キー/
■27267 / inTopicNo.6)  Re[4]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ 渋木宏明(ひどり) (937回)-(2008/10/31(Fri) 20:23:20)
渋木宏明(ひどり) さんの Web サイト
> button1_Clickでは、Paintイベントを呼ぶだけにする。

イベント呼んだらあかん。

再描画を促すのなら Invalidate+Update か Refresh で。
引用返信 編集キー/
■27268 / inTopicNo.7)  Re[5]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ 渋木宏明(ひどり) (938回)-(2008/11/01(Sat) 07:37:22)
渋木宏明(ひどり) さんの Web サイト
> 再描画を促すのなら Invalidate+Update か Refresh で。

目的にもよるけどね。

でも、イベントハンドラを直呼びするのは、ほとんどの場合お勧めしません。
引用返信 編集キー/
■27269 / inTopicNo.8)  Re[6]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ やじゅ (741回)-(2008/11/01(Sat) 09:04:52)
やじゅ さんの Web サイト
No27268 (渋木宏明(ひどり) さん) に返信
>再描画を促すのなら Invalidate+Update か Refresh で。
>

そうです、そっちですね。


No27258 (Sai さん) に返信
> スクロールして画面から消えた後、元に戻ると描画が消えてしまいます。
> この描画が消えなくする方法はありますか?

言語は違うけど、Windowsの描画の仕組みの説明として
下記サイトを参考に。
グラフィックの描画について
http://kakinotane.s7.xrea.com/delphi/d2/d040.html
引用返信 編集キー/
■27334 / inTopicNo.9)  Re[7]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ Sai (3回)-(2008/11/04(Tue) 10:08:52)

皆さん、いろいろとご教示頂きありがとうございます。3連休で
ネットが繋がらない所に行っておりましたので返事が遅れて申し
訳ありません。

>再描画を促すのなら Invalidate+Update か Refresh で。

折角、ご教示頂きましたが初心者の私には、なかなか理解が難しく
もう少し分かりやすく教えていただけませんか?
再描画と云うと何かスクロールが停止してから行うようなイメージ
がありますが、スクロール中も隠れていた部分もちゃんと表示されて
元の方向へスクロールしてもちゃんと表示されながらスクロールして
行くのでしょうか?
できれば、簡単なコード部分も記述頂けましたら助かります。
他力本願で申し訳ありませんがよろしくお願いいたします。
引用返信 編集キー/
■27343 / inTopicNo.10)  Re[8]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ やじゅ (748回)-(2008/11/04(Tue) 11:53:52)
やじゅ さんの Web サイト
No27334 (Sai さん) に返信
>
> できれば、簡単なコード部分も記述頂けましたら助かります。
> 他力本願で申し訳ありませんがよろしくお願いいたします。

private void button1_Click(object sender, EventArgs e)
{
Panel.Invalidate;
}

描画処理は、Panel_Paintイベント内に記述するって感じです。


言語は違うけど、Windowsの描画の仕組みの説明として下記サイトを参考に。
グラフィックの描画について
http://kakinotane.s7.xrea.com/delphi/d2/d040.html
引用返信 編集キー/
■27354 / inTopicNo.11)  Re[9]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ Sai (4回)-(2008/11/04(Tue) 13:59:52)
No27343 (やじゅ さん) に返信
> ■No27334 (Sai さん) に返信
>>
>>できれば、簡単なコード部分も記述頂けましたら助かります。
>>他力本願で申し訳ありませんがよろしくお願いいたします。
>
> private void button1_Click(object sender, EventArgs e)
> {
> Panel.Invalidate;
> }
>

理解力がなくて申し訳ありません。Panel.Invalidate;を記述すると
「割り当て、呼び出し、インクリメント、デクリメントおよび新しい
オブジェクトのみがステートメントとして使用できます。」と云う
エラーになるのですが何か定義とかが必要ですか?

> 描画処理は、Panel_Paintイベント内に記述するって感じです。
>

Panel_Paintイベントを記述する場所ですが、ボタンが押下されてから
表作成になるのですが何処に記述すればよろしいでしょうか?
ボタンが押されて再描画ではなくボタンが押されて表作成してスクロール
中もちゃんと表示したいです。

>
> 言語は違うけど、Windowsの描画の仕組みの説明として下記サイトを参考に。
> グラフィックの描画について
> http://kakinotane.s7.xrea.com/delphi/d2/d040.html

TForm1.FormPaint が Panel_Paintイベントに相等するのだろうという事は分かります
が、今回行おうとしている

ボタン押下→表作成→スクロール(隠れていた部分が表示されながらスクロール)

とどう結びつくのかがピンときませんでした。
本当に申し訳ありませんが、処理の記述を簡単に教えて頂けませんか?

例)
クラス定義
{
 button1_Click{}; // Panel.Invalidate;だけ
 Panel_Paint{}; // 描画処理



}
の様に記述して頂けたらそれに処理を加えていけますので後は、それを応用して
作成します。お手数をお掛けしますが小学生でも理解できるくらいに噛み砕いて
ご教示願えましたら幸いです。
 
引用返信 編集キー/
■27356 / inTopicNo.12)  Re[10]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ やじゅ (750回)-(2008/11/04(Tue) 14:30:17)
やじゅ さんの Web サイト
No27354 (Sai さん) に返信
>
> 理解力がなくて申し訳ありません。Panel.Invalidate;を記述すると
> 「割り当て、呼び出し、インクリメント、デクリメントおよび新しい
> オブジェクトのみがステートメントとして使用できます。」と云う
> エラーになるのですが何か定義とかが必要ですか?
>

もしかしたら、()が足りなかったかも・・・
Panel.Invalidate();

> ボタン押下→表作成→スクロール(隠れていた部分が表示されながらスクロール)
>
> とどう結びつくのかがピンときませんでした。

★描画されるグラフィックは保存されていないがキーポイントかなと。
ボタン押下→表作成で初めて表を表示させたいなら、
ボタン押下でフラグを立てて、Paintイベントにてフラグが立っていたら表作成させるとか。

スクロールしたら、自動的にPaintイベントが走るので、再度表作成することで、隠れている
部分が表示されるようになるのかなと。

表示されない余分なところまで描画処理されるのを防ぎたいなら、そこは工夫する必要があります。
引用返信 編集キー/
■27357 / inTopicNo.13)  Re[11]: Panel に線描画で表作成したときのスクロールバー
□投稿者/ Jitta on the way (209回)-(2008/11/04(Tue) 14:34:07)
Image 作って、Panel.BackgroundImage 等に指定する、じゃダメなの?
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -