こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC# 追加フォーム生成時、フォームに描画できない

前略
・VC#(.NET 2008)のプログラムでおしえてください。
・メインのWindowsフォームからボタンクリックで 追加したサブWindowsフォーム上のピクチャーボックス上に何も操作なしでに描画したいのですができません。CreateGraphics()でオブジェクトを生成して描画しています。どのようにしたらよいのかおしえてください。フォームのイベントとして、Paint,Load,shown,Activated等いろいろやってもだめでした。
 尚、サブフォームにボタンをもうけ このメソッドの中に描画コマンドを書き、ボタンを操作すると描画できます。下記は円を描こうとしていますが、shapeコンポーネントでは描けな複雑な描画をしたいと思っています。

・以下に 下記の動作となるソースコードを記載します。
(1)起動するとメインフォームForm1のpictureBox1に 赤い円が描かれる
(2)ボタンbutton1をクリックするとForm2が表示される。
 Form2上のラベルlabel1とlabel2の文字色は青色に変わっています。
 しかし、円は何故か描かれていません
(3)Form2上のボタンをクリックすると赤い円がForm2上に描かれます。

 どこをどのように直せば追加のサブフォームForm2が表示された時に Form2上のpictureBox1に円が描がかれているのでしょうか。以上、よろしくお願いします

//-----------------------------------------------------------
//メインフォーム
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

private void button1_Click(object sender, EventArgs e){
Form2 form2 = new Form2();
form2.ShowDialog();
}

private void Form1_Paint(object sender, PaintEventArgs e){
Graphics g = pictureBox1.CreateGraphics();
g.DrawEllipse(Pens.Red, 0, 0, 200, 200);
}

}
}

//サブフォーム
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace temp2
{
public partial class Form2 : Form
{
public Form2(){
InitializeComponent();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e){
label1.ForeColor = Color.Blue;
Graphics g1 = pictureBox1.CreateGraphics();
g1.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
label2.ForeColor = Color.Blue;
}

private void button1_Click(object sender, EventArgs e){
Graphics g2 = pictureBox1.CreateGraphics();
g2.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
}

private void Form2_Paint(object sender, PaintEventArgs e){
}

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

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

以上

投稿日時 - 2012-02-26 13:28:39

QNo.7328259

すぐに回答ほしいです

質問者が選んだベストアンサー

私まではまりかけました(笑)
Paintイベントから提供されるGraphicsを使用しましょう。

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
label1.ForeColor = Color.Blue;
//Graphics g1 = pictureBox1.CreateGraphics();
Graphics g1 = e.Graphics;
g1.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
}

http://www.atmarkit.co.jp/fdotnet/dotnettips/458picboxdraw/picboxdraw.html

投稿日時 - 2012-02-26 14:16:53

お礼

前略
・ ご教授のように、Paintイベントから提供されるGraphicsを使用したらできました。 本件で丸2日悩んでいました。本当にありがとうございます。

private void pictureBox1_Paint(object sender, PaintEventArgs e){
label1.ForeColor = Color.Blue;

Graphics g1 = e.Graphics;
// Graphics g1 = pictureBox1.CreateGraphics();
g1.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
label2.ForeColor = Color.Blue;
}

以上

投稿日時 - 2012-02-26 14:48:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問