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

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

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

Re[4]: PictureBoxに図を描画する方法


(過去ログ 99 を表示中)

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

■59134 / inTopicNo.1)   PictureBoxに図を描画する方法
  
□投稿者/ カズサト (4回)-(2011/05/17(Tue) 06:17:48)
カズサト さんの Web サイト

分類:[C#] 

よろしくお願いします。

ピクチャーボックスに多角形の図形を描きたいのですが以下のプログラムを
実行すると次のエラーメッセージが出ます。

「名前’PictureBox1'は現在のコンテキスト内に存在しません。」

ちなみに、Form1にpictureBoxを配置してあります。

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Collections;

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

private void Form1_Load(object sender, EventArgs e)
{
}

private void pictureBox1_Click(object sender, EventArgs e)
{
Graphics g = PictureBox1.CreateGraphics();

Point[] points = {new Point(90, 10), new Point(20, 180),
new Point(190, 50), new Point(10, 70) ,
new Point(160, 120)};

g.FillPolygon(Brushes.Black, points, FillMode.Alternate);
}
}
}

引用返信 編集キー/
■59135 / inTopicNo.2)  Re[1]: PictureBoxに図を描画する方法
□投稿者/ ぽぴ王子 (505回)-(2011/05/17(Tue) 07:17:03)
ぽぴ王子 さんの Web サイト
No59134 (カズサト さん) に返信
> よろしくお願いします。
> 
> ピクチャーボックスに多角形の図形を描きたいのですが以下のプログラムを
> 実行すると次のエラーメッセージが出ます。
> 
> 「名前’PictureBox1'は現在のコンテキスト内に存在しません。」
> 
> ちなみに、Form1にpictureBoxを配置してあります。
> 

Form1に配置してあるのは picutureBox1 なのですよね?
pictureBox1 と PictureBox1 は別のオブジェクトとして認識されるので、名前を正しく
入力しないといけません。

また、クリックイベントで CreateGraphics を使われていますが、これはむしろ
Paint イベントを使用した方が良いかと思います。
こんな感じ。

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Point[] points = { new Point(90, 10), new Point(20, 180), new Point(190, 50), new Point(10, 70), new Point(160, 120) };

            e.Graphics.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate);
        }

引用返信 編集キー/
■59136 / inTopicNo.3)  Re[2]: PictureBoxに図を描画する方法
□投稿者/ カズサト (5回)-(2011/05/17(Tue) 08:33:15)
カズサト さんの Web サイト
No59135 (ぽぴ王子 さん) に返信

親切に教えていただき、ありがとうございました。
picutureBox1に図を描画する方法は解決できました。
大変、助かりました。

また、
Paint イベントを使用することを教えていただき、ありがとうございました。

> また、クリックイベントで CreateGraphics を使われていますが、これはむしろ
> Paint イベントを使用した方が良いかと思います。

次の質問ですけど、Paint イベントの使い方がわかりません。
どのようにしたら、ここにに飛んで来るのでしょうか?

よろしくお願いします。
引用返信 編集キー/
■59138 / inTopicNo.4)  Re[3]: PictureBoxに図を描画する方法
□投稿者/ よねKEN (700回)-(2011/05/17(Tue) 11:19:38)
No59136 (カズサト さん) に返信
> 次の質問ですけど、Paint イベントの使い方がわかりません。
> どのようにしたら、ここにに飛んで来るのでしょうか?

Paintイベントは再描画が必要(※)なったら発生し、イベントハンドラ(pictureBox1_Paintのこと)が呼び出されます。

※たとえば…
  ・フォームが最小化の状態から通常の状態に戻った
  ・フォームに他のウィンドウが重なってpictureBox1にも重なった
  といったようなときです。

で、お聞きになりたいのは、そこではなくてClickイベントのタイミングで
どうやって描画内容の指示を出すかということだと思いますが、たとえば以下のような感じで
制御することができます。ポイントはInvalidateメソッドです。詳しくはMSDNライブラリを参照してください。

--コード例--

// 描画対象の多角形の点
private Point[] points;

private void pictureBox1_Click(object sender, EventArgs e)
{

    // 描画対象の点を設定
    points = {new Point(90, 10), new Point(20, 180), 
              new Point(190, 50), new Point(10, 70) , 
              new Point(160, 120)};

    // 再描画を必要になったことを通知する
    pictureBox1.Invalidate();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    // ここではpoints変数に設定されていればClickされた後と判断することにした
    if (points != null)
    {
        e.Graphics.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate);
    }
}

引用返信 編集キー/
■59140 / inTopicNo.5)  Re[4]: PictureBoxに図を描画する方法
□投稿者/ カズサト (6回)-(2011/05/17(Tue) 11:59:29)
カズサト さんの Web サイト
よねKENさん
ぽぴ王子 さん

ありがとうございました。
解決できました。



No59138 (よねKEN さん) に返信
> ■No59136 (カズサト さん) に返信
>>次の質問ですけど、Paint イベントの使い方がわかりません。
>>どのようにしたら、ここにに飛んで来るのでしょうか?
>
> Paintイベントは再描画が必要(※)なったら発生し、イベントハンドラ(pictureBox1_Paintのこと)が呼び出されます。
>
> ※たとえば…
> ・フォームが最小化の状態から通常の状態に戻った
> ・フォームに他のウィンドウが重なってpictureBox1にも重なった
> といったようなときです。
>
> で、お聞きになりたいのは、そこではなくてClickイベントのタイミングで
> どうやって描画内容の指示を出すかということだと思いますが、たとえば以下のような感じで
> 制御することができます。ポイントはInvalidateメソッドです。詳しくはMSDNライブラリを参照してください。
>
> --コード例--
>
> // 描画対象の多角形の点
> private Point[] points;
>
> private void pictureBox1_Click(object sender, EventArgs e)
> {
>
> // 描画対象の点を設定
> points = {new Point(90, 10), new Point(20, 180),
> new Point(190, 50), new Point(10, 70) ,
> new Point(160, 120)};
>
> // 再描画を必要になったことを通知する
> pictureBox1.Invalidate();
> }
>
> private void pictureBox1_Paint(object sender, PaintEventArgs e)
> {
> // ここではpoints変数に設定されていればClickされた後と判断することにした
> if (points != null)
> {
> e.Graphics.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate);
> }
> }
>
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -