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

わんくま同盟

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

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


(過去ログ 31 を表示中)
■14280 / )  パネル内の座標値、そして座標値の範囲を設定する方法
□投稿者/ Tetsu (4回)-(2008/02/14(Thu) 14:29:30)
Tetsu さんの Web サイト

分類:[C#] 

開発環境:Visual Studio 2005
使用言語:C#

先日、パネルへの折れ線描画についてこちらで質問させていただいた者です。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=14149

まだこの掲示板でのルールがあまりわかっていないので、頻度が多く質問をしてはいけないのかもしれませんが、質問させていただきます。

先日は、パネルへの折れ線の描画方法について質問させていただきましたが、今回は、

「描画をするパネルの座標値をどうやってコードの中で設定できるのか」

ということについて質問させていただきます。座標は普通Locationで与えられていますが、LocationはForm上での座標になります。私が行いたいのは、「パネル内での座標値をどう設定するか」ということです。具体的には、パネル内では左上の座標が(0, 0)ですが、その値を変更することが可能なのかどうか、知りたいのです。

私が行いたい作業を図にしてウェブ上にアップロードしました。panel.pdfというファイルになります。ご覧いただけると嬉しいです。
http://tetsuo.koba.googlepages.com/home

私がやりたいことは、

1.データベースから、x座標、y座標を含む点のデータをクエリする。
2.点データを取得する。
3.取得した点データのx座標、y座標、それぞれの最小値、最大値(コードでは、xMin, yMin, xMax, yMax)を求める。
◎4.それら最大値、最小値を、パネルの座標に設定する。具体的には、普通はパネルの一番左上の座標が(0, 0)ですが、それを(xMin, yMax)に設定し、そして、パネルの一番右下の座標を(xMax, yMin)に設定したいと思っています。
5.折れ線を、4で座標を設定しなおしたパネル上に描く。

ということです。◎がついている、4番のやり方がわかりません。下記のコードではForm上にあるボタンをクリックすると折れ線を描画するようになっています。その中で、

//パネルの座標値を設定する方法がわかりません

となっている場所に上記の4番の作業をしたいと思っています。どなたか教えていただけないでしょうか。よろしくお願いします。




        public partial class Form1 : Form
        {
            DrawingMOD myDraw; //Form1で共通に使用するオブジェクト変数の宣言

            public Form1()
            {
                InitializeComponent();
                this.myDraw = new DrawingMOD(this.panel1);
                myDraw.DrawPanel += new DrawOnPanel(myDraw_DrawPanel);

            }

            //描画に使用する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;

      //クエリされた点すべての座標の中で、x座標、y座標の最大値、最小値
            private float xMin;
            private float yMin;
            private float xMax;
            private float yMax;

            private void button1_Click(object sender, EventArgs e)
            {
                this.myDraw.DrawMovingObjects();
            }

            //myDraw_DrawPanelイベントハンドラ
            private void myDraw_DrawPanel(object sender, PaintEventArgs e)
            {
                //パネルのインスタンスを作成
                Panel panel = sender as Panel;
                e.Graphics.Clear(Color.Green);

                //パネルに設定する座標の最大値、最小値を求める。仮定として作った点座標から計算
                xMin = 50.01f;
                yMin = 100.01f;
                xMax = 120.01f;
                yMax = 120.01f;

                //パネルの座標値を設定する方法がわかりません
                panel.Location = new PointF(xMin, yMin);
                panel.Width = Math.Abs(xMax - xMin);
                panel.Height = Math.Abs(yMax - yMin);

                //ペンの色を定義
                int cRed = 200;
                int cGreen = 100;
                int cBlue = 100;

                //折れ線に使用する3点をPointF[]に格納する
                PointF[] myPoints = new PointF[3];
                myPoints[0] = new PointF(xOne, yOne);
                myPoints[1] = new PointF(xTwo, yTwo);
                myPoints[2] = new PointF(xThree, yThree);

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

                pen.EndCap = LineCap.ArrowAnchor; //折れ線を矢印にする
                e.Graphics.DrawLines(pen, myPoints); //折れ線を描く
            }

            ////////e.Dispose(); //Graphicsオブジェクトの破棄
        }

返信 編集キー/


管理者用

- Child Tree -