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

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

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

No.14463 の関連記事表示

<< 0 >>
■14463  Re[16]: パネル内の座標値、そして座標値の範囲を設定す
□投稿者/ 魔界の仮面弁士 -(2008/02/19(Tue) 12:17:12)
    2008/02/19(Tue) 13:04:10 編集(投稿者)

    No14461 (Tetsu さん) に返信
    > スクロール時に自動的に再描画されるようにするには、スクロールバーの部分を設定する(HScrollBar/VScrollBar コントロール)
    > 必要があるということになるのでしょうか。
    HScrollBar/VScrollBar を使う必要は無いはずですよ。
    Panel を入れ子にして、AutoScroll でスクロールさせている分には。


    // 何もコントロールを貼っていないフォームに対して、以下のコードを実行してみてください。
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.ComponentModel;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    private PointF One = new PointF(50.01f, 100.01f);
    private PointF Two = new PointF(100.01f, 100.01f);
    private PointF Three = new PointF(120.01f, 120.01f);

    CheckBox checkBox1 = new CheckBox();
    Panel panel1 = new Panel();
    Panel panel2 = new Panel();
    public Form1()
    {
    InitializeComponent();

    checkBox1.Text = "描画する";
    checkBox1.AutoSize = true;
    checkBox1.Location = Point.Empty;
    this.Controls.Add(checkBox1);

    panel1.AutoScroll = true;
    panel1.Dock = DockStyle.Fill;
    panel2.AutoSize = true;
    panel2.Size = new Size(1000, 1000);
    panel2.Location = Point.Empty;

    checkBox1.CheckedChanged += checkBox1_CheckedChanged;

    checkBox1.Checked = true;
    panel1.Controls.Add(panel2);
    this.Controls.Add(panel1);

    this.Size = new Size(400, 400);
    }

    void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
    if (checkBox1.Checked)
    {
    panel2.Paint += panel2_Paint;
    }
    else
    {
    panel2.Paint -= panel2_Paint;
    }
    panel2.Invalidate();
    }

    void panel2_Paint(object sender, PaintEventArgs e)
    {
    e.Graphics.Clear(Color.Black);

    int cRed = 200;
    int cGreen = 100;
    int cBlue = 100;

    PointF[] myPoints = new PointF[3];
    myPoints[0] = One;
    myPoints[1] = Two;
    myPoints[2] = Three;

    for (int i = 0; i < 3; i++)
    {
    using (Pen pen = new Pen(Color.FromArgb(cRed, cGreen, cBlue), 4))
    {
    pen.EndCap = LineCap.ArrowAnchor;
    e.Graphics.DrawLines(pen, myPoints);
    }
    myPoints[0] += new Size(200, 200);
    myPoints[1] += new Size(200, 200);
    myPoints[2] += new Size(200, 200);

    cRed += 20;
    cGreen += 40;
    cBlue += 20;
    }
    }
    }
    }


    > ループの後にxOne〜yThreeの値をxOneInit〜yThreeInitに戻してみましたが、変化はありませんでした。
    戻しても意味はないと思いますよ。
    ループ後に、それらの変数値が利用されることは無いのですから。

    # 行き当たりばったりでコーディングするのではなく、個々の変数の変化を
    # きちんと把握して開発していかないと、なかなか先に進めませんよ。

    > this.panel2.AutoSize = true;
    AutoSize 設定は、そのイベントが発生するたびに再設定しなければいけないのでしょうか?

    > Pen pen = new Pen(Color.FromArgb(cRed, cGreen, cBlue), 4); //ペンを作成
    No14350 の繰り返しになりますが、Pen の解放処理(Dispose メソッドあるいは using ブロック)を忘れています。
記事No.14280 のレス /過去ログ31より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -