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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.14366 の関連記事表示

<< 0 >>
■14366  Re[10]: パネル内の座標値、そして座標値の範囲を設定する
□投稿者/ 魔界の仮面弁士 -(2008/02/16(Sat) 09:27:52)
    2008/02/16(Sat) 09:48:12 編集(投稿者)

    No14361 (Tetsu さん) に返信
    > では、このforループを使用している以上、再描画をしても私がやりたいことは達成できない、ということでしょうか。
    単純修正では、forループを抜けた直後に、
     xOne = 50.01f;
    などのように、元の値を設定しなおすだけで済むと思いますよ。


    ただしそもそもは、xOne を使いまわしているのが問題なのだと思います。
    「xOne の初期値」を取っておく変数と「描画用」の変数は分ける必要があるので、今回の場合は

     private float xOneInit = 50.01f;
       :
     void panel2_Paint(object sender, PaintEventArgs e)
     {
       :
      float xOne = xOneInit;
       :
      for (int i = 0; i < 3; i++)
      {
        :
       myPoints[0] = new PointF(xOne, yOne);
        :
       e.Graphics.DrawLines(pen, myPoints);
       xOne += 200f;
        :
      }
     }
    のようにした方が良いでしょう。もちろん、xOne 以外の座標についても同様です。


    > データベースから読んできたx,y座標を一つずつ使って折れ線を描くのですが、
    その場合、Paint イベントの中で myPoints 配列を決定するのでは無く、
    Paint イベントに入る前に、myPoints 配列を用意しておけばよいと思いますよ。
    (xMin, yMin, xMax, yMax なども、Paint イベントの発生前に事前に計算しておく)

    また、それらの描画座標(myPoints 配列等)が変更された場合には、
    Invalidate を呼び出して、Paint イベントを再発生させると良いでしょう。


    > ・Bitmapとして表示をするか(やじゅさんのコメントより)
    描画内容が複雑であり、再描画に時間を要する場合などでは、その方法がおすすめです。

    ただし、描画内容が頻繁に変化する場合には(心電図など)、Bitmap や Metafile を
    用意するよりも、やはり Paint で描画した方が良いでしょう。
    (変化の少ない部分だけを Bitmap として持ち、変化の多い部分を Paint で担当という手もあり)

    また、現在の 1000x1000 という程度のキャンバスなら、デスクトップの壁紙程度のサイズなので
    さほど問題は無いですが、もしも巨大なキャンバスが必要な場合は、全体を一つの Bitmap として
    表示させるという方法では、負荷が高いかも知れません。


    > ・描画する前に座標を変換し、パネルの中に全ての座標が収まるようにし、スクロールが必要ないようにする
    座標変換というと、このあたりですね。
    http://msdn.microsoft.com/library/ja/cpguide/html/_gdiplus_Coordinate_Systems_and_Transformations_about.asp

    現在のキャンバスである panel2 の Size は、1000, 1000 ですよね。
    もしもそれに収まるなら、縮小のための座標変換は不要だと思います。

    もし、1000,1000 では収まりきれないほどの内容を、縮小せずにスクロールで表現したいなら、
    Panel 重ね合わせではなく、HScrollBar/VScrollBar コントロールとの組み合わせで、
    表現するという方法もあります。
    http://msdn2.microsoft.com/ja-jp/library/b2xw7sx1.aspx
記事No.14280 のレス /過去ログ31より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -