none
PictureBoxの前面に円を描くには? RRS feed

  • 質問

  • いつもお世話になります。
    Windows7/8でVisual Studio Express 2013 for Windows Desktopで開発しています。
    PictureBoxを配置してあるFormで、PictureBoxの上にマウスクリックで円を描きたいと考えています。
    そこで、
    private void pictureBox1_Click(object sender, EventArgs e) {
     PictureBox picturebox = sender as PictureBox;
     drawcircle(new Point(200, 200));
    }

    private void drawcircle(Point point) {
     Graphics g = CreateGraphics();
     SolidBrush Brush = new SolidBrush(Color.Red);
     Rectangle rectangle = new Rectangle(point.X, point.Y, 10, 10);
     g.FillEllipse(Brush, rectangle);
     Brush.Dispose();
     g.Dispose();
    }
    として動作を確認しています。
    これで円の描画はできているのですが、PictureBoxのうしろに隠れてしまっていて、見ることができません。
    円を描画しているかどうかは、pictureboxと描画位置をずらすことで確認できました。
     drawcircle(new Point(20, 20));
    などのようにです。
    重ね合わせの問題かと思って、drawcircleしたあとに
    picterubox1.SendToBack();
    してみたのですが、これでも描画した円を見ることができません。
    PictureBoxの前面に円を描くには、どのようにしたらよいですか?




    • 編集済み skyrabbit 2014年4月12日 11:35 typo
    2014年4月12日 11:10

回答

  • 試していませんが、おそらくCreateGraphicsメソッドの実行に問題があります。
    示されたコードではFormのCreateGraphicsメソッドを実行しています。以下のようにPictureBoxのメソッドとして実行してみて下さい。

    Graphics g = pictureBox1.CreateGraphics();


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク skyrabbit 2014年4月12日 13:02
    2014年4月12日 11:56
    モデレータ

すべての返信

  • 試していませんが、おそらくCreateGraphicsメソッドの実行に問題があります。
    示されたコードではFormのCreateGraphicsメソッドを実行しています。以下のようにPictureBoxのメソッドとして実行してみて下さい。

    Graphics g = pictureBox1.CreateGraphics();


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク skyrabbit 2014年4月12日 13:02
    2014年4月12日 11:56
    モデレータ
  • 早速のご回答ありがとうございます。
    ご教示いただいた方法で目的を達成できました。
    CreateGraphicsについて、たいへん勉強になりました。
    2014年4月12日 13:03