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

わんくま同盟

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

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


(過去ログ 31 を表示中)
■14321 / )  Re[5]: パネル内の座標値、そして座標値の範囲を設定する
□投稿者/ Tetsu (8回)-(2008/02/15(Fri) 05:16:03)
Tetsu さんの Web サイト
2008/02/15(Fri) 10:44:58 編集(投稿者)
2008/02/15(Fri) 08:11:30 編集(投稿者)
<pre><pre>2008/02/15(Fri) 08:08:42 編集(投稿者)
<pre><pre>2008/02/15(Fri) 08:03:13 編集(投稿者)
<pre><pre>2008/02/15(Fri) 08:02:11 編集(投稿者)

<pre><pre>やじゅさん、ありがとうございます。

> PictureBoxコントロールに描画するとかパネルの中にパネルを入れるとかすればいいかも
> 
> スクロールバーを付けて画像を表示する
> http://dobon.net/vb/dotnet/graphics/scrollimage.html

上記のサイトで掲載されているものを参考にし、パネル(panel1)の中にパネル(panel2)を入れ、panel2上に折れ線を描くコードを作成しました。
panel2のWidthとHeightをpanel1よりも大きい範囲に設定したところ、スクロールバーが現れました。
しかし、肝心の折れ線が表示されないのです。正確には、

「コードを走らせると、一瞬だけ折れ線がパネル上に表示され、その後折れ線が消え、その後は黒い背景がずっと映っている」

ようになってしまいます。
黒い背景は私が設定したものなので、背景が映っているのですが、描かれた折れ線がなぜか一瞬映って消えてしまいます。
背景色を設定しなくとも、同じような結果になります。
パネルのプロパティの設定に問題があるのではないかと思い、いろいろと値を変更してみましたが、解決できませんでした。

また、何度かコードを走らせると、たまに折れ線がちゃんと描画されます。
その時にスクロールでパネルを動かすと、一度パネル上から消えた折れ線は、再び描画されなくなってしまいます。
再描画をする必要があるのでしょうか。この点についてもよくわかりません。
以下に私が作成しましたコードをお知らせします。

なお、panel2のプロパティは以下のように設定しました。
Location:(0, 0)
AutoSize:true
Width:1000
Height:1000

panel1のプロパティは以下のように設定しました。
AutoScroll:true

なお、panel1 と panel2 はあらかじめForm1上に作成し、panel2をpanel1の中に入れてあります。
問題点をまとめますと、以下のようになります。

・アプリケーションを起動すると、折れ線が一瞬パネルに描かれ、
すぐに消えてしまう。

・折れ線が表示されたパネルをスクロールし、再び元の場所まで戻ると、
それまで描かれていた折れ線が消えてしまう。

という2点です。アドバイスをいただけると嬉しいです。何度も申し訳ありませんが、よろしくお願いします。トピックと質問が少しかみ合わなくなっているので、新しい質問として掲載したほうが良いのかもしれませんね。



     public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //折れ線を描くのに使用する3点の座標を定義
        private float xOne = 50.01f;
        private float yOne = 100.01f;
        private float xTwo = 100.01f;
        private float yTwo = 100.01f;
        private float xThree = 120.01f;
        private float yThree = 120.01f;

        //panel1 の中にpanel2をいれ、panel2上に折れ線を描く
        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            //折れ線を描くpanel2 を作成
            //Panel panel2 = sender as Panel;

            //背景の色を黒に設定
            //e.Graphics.Clear(Color.Black);

            //折れ線を絵がくために使用する3点の配列
            PointF[] myPoints = new PointF[3];

            //RGB color parameters
            int cRed = 200;
            int cGreen = 100;
            int cBlue = 100;

            //ペンを定義
            Pen pen = new Pen(Color.FromArgb(cRed, cGreen, cBlue), 4);

            //折れ線の位置をずらして3本の折れ線を描画
            for (int i = 0; i < 3; i++)
            {
                //点を配列に格納
                myPoints[0] = new PointF(xOne, yOne);
                myPoints[1] = new PointF(xTwo, yTwo);
                myPoints[2] = new PointF(xThree, yThree);

                //折れ線を矢印にする
                pen.EndCap = LineCap.ArrowAnchor;

                //折れ線を描く
                e.Graphics.DrawLines(pen, myPoints);

                //折れ線の位置を変える
                xOne += 200f;
                yOne += 200f;
                xTwo += 200f;
                yTwo += 200f;
                xThree += 200f;
                yThree += 200f;

                //折れ線の色を変える
                cRed += 20;
                cGreen += 40;
                cBlue += 20;
            }
            //パネルを消去
            //e.Graphics.Dispose();
        }
    }</pre></pre></pre></pre></pre></pre></pre></pre>

返信 編集キー/


管理者用

- Child Tree -