Graphicsプロパティについて

このQ&Aのポイント
  • Graphicsプロパティは、描画を行うために必要なインスタンスを定義するためのものです。
  • Graphicsクラスは、GDI+(Graphics Device Interface)を使用してウィンドウに描画するための機能を提供します。
  • 具体的には、Pea.Graphicsは、描画イベントの引数として渡されるPaintEventArgsクラスのGraphicsプロパティであり、描画に必要なリソースを提供します。
回答を見る
  • ベストアンサー

Graphicsプロパティ

例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。

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

  • ベストアンサー
回答No.11

> この文の「グラフィックス」というのはペンだのフォントだのブラシだの、といった画材、と考えてよいでしょうか。 いや、むしろ「キャンバス」ですね。

tranceporter
質問者

お礼

この一言が欲しかったです ありがとうございます。確信に触れられました。 またよろしくお願いします。

その他の回答 (10)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.10

> 腑に落ちないのはSystem.Drawing.Graphicsのインスタンスgrfxに > System.Windows.Forms.PaintEventArgs.Graphicsプロパティを代入する、という部分です。 > 型も違うのにどこのメソッドにどのメソッドが入るとかはわかるのでしょうか? System.Windows.Forms.PaintEventArgs の Graphics プロパティの型は System.Drawing.Graphics です。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.painteventargs.graphics(v=vs.110).aspx ある型の変数に全く同じ型の値を代入可能であることに何の不思議もありません。 > コンソールアプリをたくさん作ってもイベントドリブンはわからないと思います。 > ましてデバイスコンテキストなど あなたのおっしゃる通り、イベントドリブンやデバイスコンテキストなどの知識はコンソールアプリでは身に着けるのは困難でしょう。 しかし、逆にイベントドリブンやデバイスコンテキストなどの知識だけがあってもプログラムは組めません。 それらは単に部品に過ぎず、それらを意図したとおりに配置し処理をさせる必要があります。 そのような組み立てのスキルを磨くうえでは、GUIプログラミングでは動かすのに必要なコードの量が多すぎ、本質的な部分がその他の部分に紛れてしまいます。 だから、基本的な構文をマスターする上では、動かすのに必要なコード量が少ないコンソールアプリが最適なのです。

tranceporter
質問者

お礼

なるほどコンソールアプリのソースも手を動かしていこうと思います。 ありがとうございました。

回答No.9

> このプロパティはディスプレイデバイスを指していて、だからgetしかできない?? OnPaintは「さあ描け」というフレームワークからの指令です。 そのとき、画材はEventArgs内のGraphicsを使え、とフレームワークが用意してくれたもの。 setすることに意味がないのでsetできないよう定義されています。

tranceporter
質問者

補足

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.painteventargsni.graphics(v=vs.110).aspx 描画に使用するグラフィックスを取得します。 この文の「グラフィックス」というのはペンだのフォントだのブラシだの、といった画材、と考えてよいでしょうか。 腑に落ちないのはSystem.Drawing.Graphicsのインスタンスgrfxに System.Windows.Forms.PaintEventArgs.Graphicsプロパティを代入する、という部分です。 型も違うのにどこのメソッドにどのメソッドが入るとかはわかるのでしょうか? 

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.8

> 基本の本に書いてある、ということなのですが、もうちょっと具体的に > なんとか~という本の何ページ目を読め、とか > URLなどご紹介願えないでしょうか 「情報源を探す」のも技術のうちです。 厳しいことを言うようですが、 何でもかんでも他人に聞かないと進まないようではプログラミングは向いていません。 ここで聞こうが、2chで聞こうが答えは同じでしょう。 この姿勢を改めることがあなたにとっての「最初の壁」かもしれません。

tranceporter
質問者

補足

コンソールアプリをたくさん作ってもイベントドリブンはわからないと思います。 ましてデバイスコンテキストなど 私の手持ちの資料の説明ではGraphics grfx = pea.Graphics; という一行を 「OnPaintメソッド内でこのGraphicsオブジェクトに対しての描画を行う」 とあります。 あなたがただの初心者叩き趣味でやってるのでないのなら この文章の説明をしてみてもらえますか? ネットではさんざん検索しました。私はこの相談箱が信頼性の高い情報源と思っています。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.7

> コンソールのプラグラムですと変数とか繰り返し > とか本当に基本だけしかのってない本ばかり > なので良書などご紹介していただけると助かります ……。 はっきり言います。 あなたの今回の質問は、 「基本だけしかのってない本」には必ず書いてあることで、 その内容をきちんと理解しているならば出てこない質問です。 つまり、そのようなセリフが出てくること自体、  『言語の基礎を全く理解していません』 と宣言しているのと同じです。 まずあなたの言う「基本だけしかのってない本」をしっかり読んで、 演習や例題を実際に入力して動かしなさい。 そして、その本に書いてあることを他人にきちんと説明できるようになりなさい。 他の本やGUIプログラミングに手を出すのはそれからです。ූ

tranceporter
質問者

補足

ご指摘ありがとうございます。 基本の本に書いてある、ということなのですが、もうちょっと具体的に なんとか~という本の何ページ目を読め、とか URLなどご紹介願えないでしょうか  プログラミングは最初の壁を乗り越えるまでは難しいと思います。2chねるに質問してるのと 同じ回答ではどうにも

回答No.6

> pea.Graphics.DrawString(""); > というのがPaintEventArgsクラスのDrawStringメソッドを > 呼び出してそれによって文字が描画される、 > ということでしょうか。 NO. 1. peaのプロパティ Graphics を取得し、 2. それのメソッド:DrawStringを呼び出しています。 1,2を分けて書いたのが元のコード。それだけのこと。

tranceporter
質問者

お礼

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.painteventargs.graphics(v=vs.110).aspx grfx は System.Drawing.Graphicsクラスのインスタンス(newがないので違う?) 、 それにPaintEventArgsクラスのGraphicsプロパティを代入し、 確信に触れられそうです このプロパティはディスプレイデバイスを指していて、だからgetしかできない??

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.5

基礎が足りていません。 まずはコンソールアプリケーションでC#やオブジェクト指向の基礎を固めてください。 GUIはその後です。

tranceporter
質問者

補足

ご指摘ありがとうございます コンソールのプラグラムですと変数とか繰り返し とか本当に基本だけしかのってない本ばかり なので良書などご紹介していただけると助かります

回答No.4

おっと失礼、 . がひとつ余分です。

回答No.3

protected override void OnPaint(PaintEventArgs pea) { pea.Graphics..DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } これ↑でもちゃんと動きますか? 動くなら、この文脈に限って言えばgfxは不要です。

tranceporter
質問者

補足

動きました。これは、.NetFrameworksのバージョンに関係あるのでしょうか。現在2.0でコンパイルしています。 Graphics grfx = pea.Graphics; がない方がなんとなくこういうことなんだろうなと思えます。つまり pea.Graphics.DrawString(""); というのがPaintEventArgsクラスのDrawStringメソッドを呼び出してそれによって文字が描画される、 ということでしょうか。 pea.Graphics.DrawString("");はなくても問題ないのでしょうか 同じようなものにBase.OnPaint()と記述されているものもありこちらもコメントアウトしてもOnPaintイベントは発生します。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

> この処理を行うことによってどういう結びつきなどが生まれるのでしょう この処理をコメントアウトした時のエラーメッセージを読みなさい。 それがこの処理が必要な理由を説明しています。

tranceporter
質問者

補足

コンテキストがありません・・のようなメッセージが出ました。 もっともgrfxの宣言を消してしまってるのでエラーが出るのは想像つくのですが・・・ 考えてはいるのですがなかなかこれだと思う発想になりません。もう少しヒントを・・・

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

必要な理由がわからないならその部分をコメントアウトしましょう。 そうすればその部分がなぜ必要なのかわかります。

tranceporter
質問者

補足

書かなければ動かない、ということはわかります。 でもなぜGraphics grfxに PainEventArgsのインスタンスpeaのGraphicsプロパティを代入するのかがわかりません。 この処理を行うことによってどういう結びつきなどが生まれるのでしょう

関連するQ&A

  • なぜForm型にキャストするのでしょう?

    using System; using System.Drawing; using System.Windows.Forms; class PaintHello { public static void Main() { Form form = new Form(); form.Text = "Paint Hello"; form.BackColor = Color.White; form.Paint += new PaintEventHandler(MyPaintHandler); Application.Run(form); } static void MyPaintHandler(object objSender,PaintEventArgs pea) { Form form = (Form)objSender;//←この部分が分かりません。 Graphics grfx = pea.Graphics; grfx.DrawString("Hello,world!", form.Font, Brushes.Black, 0, 0); } } C#の勉強をしているのですが、イベントを発生させるためにデリゲートに自分で作ったメソッドを 引数として送るというのは理解できるのですが、 このMyPaintHandlerのobject objSender という部分が、書籍の説明だと「objSenderはForm型のオブジェクトなのでキャストはうまくいく」 と書かれています。 object型というのを調べるとSystem名前空間にObjectというクラスがあるのですが、これはすべてのクラスのルートであり、、、とMSDNに書かれていて、なぜForm型と言えるのかわかりません。 そもそもこのキャストはなぜ必要なのでしょう。お願いします。

  • なぜprotected overrideなのか

    C#でわからないことが2,3あるのですが、このmsndのサンプルで public class FirstControl : Control{ public FirstControl() {} protected override void OnPaint(PaintEventArgs e) { // Call the OnPaint method of the base class. base.OnPaint(e); // Call methods of the System.Drawing.Graphics object. e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle); } } これのprotected override void OnPaint(PaintEventArgs e){} の部分なのですが、なぜprotected overrinde修飾子なのでしょう 何をオーバーライドしてるのですか?他のサンプルにも構文のように出てくるのですが。 あとOnPaintはメソッドのようですがイベントを発生させるにはデリゲートではないのでしょうか あとPaintEventArgsはクラスということですがnewはいらないのでしょうか。staticがどこかにあるのでしょうか よろしくお願いします。

  • C#で派生クラスから描画処理を行う

    C#を勉強しているのですが、GUIを作り初めて描画処理で分からない所があり、質問させて頂きます。 基本クラスの方で「Hello, world!」という文字列をDrawStringで表示させる事は出来たのですが、それを基本クラスを継承した派生クラスのメソッドで行うと何も表示されないんです。 以下が試したコードです。 //基本クラスSample1 using System; using System.Drawing; using System.Windows.Forms; public class Sample1 : Form {   protected Bitmap image; protected Graphics g; protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Sample2 s = new Sample2(); s.helloworld(); e.Graphics.DrawImage(image, 0, 0); } public Sample1() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); image = new Bitmap(600, 400); g = Graphics.FromImage(image); } static void Main() { Form form = new Sample1(); form.Text = "sample"; form.ClientSize = new Size(600, 400); form.BackColor = Color.FromArgb(0xff, 0xff, 0xff); Application.Run(form); } } //派生クラスSample2 using System; using System.Drawing; using System.Windows.Forms; public class Sample2 : Sample1 { Brush brush = new SolidBrush(Color.Black); public void helloworld() { g.DrawString("Hello, world!", this.Font, brush, 10, 10); } } なぜ表示されないのか分かる方いらしたら、ご教授願えないでしょうか。是非お願いします。

  • グラフィックスの読み取りについて。

    Option Strict On 'VisualBasic2008(無料版) Imports System.Drawing.Drawing2D Public Class Form1 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim myFont As New Font("Arial", 20, FontStyle.Bold) e.Graphics.DrawString("7", myFont, Brushes.Red, 0, 0) End Sub End Class 例えば、こんな感じのプログラムがあるとします。 PictureBox1のサイズは25*25です。 PictureBox1内のグラフィックスの読み取りがしたいのです。 質問__1 ドット単位で625のデータをARGBで読み取り配列に格納したいです。 質問__2 グラフィックスが表示されてる場合は1を代入、表示されてない場合は0を代入、配列に入れたいです。イチゼロデータを作りたいです。 よろしくお願いします。

  • Visual C# 2008 Express Editionで実行するとDOS窓が出る

    私はC#でフォームプログラミングを勉強しようと思い、「Visual C# 2008 Express Edition」をダウンロードして、取り合えずウィンドウを作るだけの簡単なプログラムを実行してみたのですが、ウィンドウと同時に黒い窓(DOS窓というのでしょうか)が現れてしまいます。 作成したアプリケーションデータを実行しても、やはり黒い画面が出てしまい困っています。 本に掲載されていたコードをウィンドウタイトルを変えて、そのままビルドしただけですし、本に付いてきたCD-ROMの中の同じサンプルプログラムのアプリケーションデータを実行しても、黒い画面は現れません。何か方法に誤りがあるのでしょうか、分かる方がいたら教えて頂きたいのですが、下がコードです。 using System; using System.Drawing; using System.Windows.Forms; public class Test : Form { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); } static void Main() { Form form = new Test(); form.Text = "ウィンドウタイトル"; form.ClientSize = new Size(600, 400); form.BackColor = Color.FromArgb(0xff, 0xff, 0xff); Application.Run(form); } } 参照設定には、 System System.Drawing System.Windows.Forms を含めています。

  • C#のGraphicsクラスについて(GDI+)

    以下のようにgraphicsクラスをつかった画像の描画をおこないました。 Graphics gr = Graphics.FromImage(mapObj); というふうにからのリソースからGraphicsオブジェクトをつくる方法です。 using System; using System.IO; using System.Windows.Forms; using System.Drawing; using System.Web; using System.Net; using System.Text; using System.Threading; using System.ComponentModel; public class MainClass{ public static void Main(string [] args){ NewForm formObj = new NewForm(); formObj.RenderMethod(); Application .Run(formObj); } } public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Bitmap mapObj = new Bitmap(500,500); Graphics gr = Graphics.FromImage(mapObj); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); this.BackgroundImage = mapObj; } } このほかに、フォームコントロールの thisl.CreateGraphics()という メソッドを使っても画像を描画できるとききました。 あるサンプルをみると public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Graphics gr = this.CreateGraphics(); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); } } とこのようにthis.CreateGraphics()をつかっていましたが 実際にはこれが描画されないのです。 Graphics gr = Graphics.FromImage(mapObj); というGraphicsクラスの静的メソッドを使う方法ではなく コントロールのCreateGraphicsメソッドをつかって描画するにはどうしたらよいのですか? 識者のかた、ご教授ください。

  • C# フォームプログラミングで

    public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { //Graphics grfx = CreateGraphics(); } private void Form2_Paint(object sender, PaintEventArgs e) { Form2 form2; form2.Paint += new PaintEventHandler(PaintHandler1); } static void PaintHandler1(object objSender,PaintEventArgs e) { Graphics grfx = e.Graphics; grfx.DrawString("test",Font font,Brushes.Black,0,0);//←ここでエラー } } このように書くと「引数を2個指定できる、メソッド DrawString のオーバーロードはありません」 というエラーがでてフォームに文字を表示できません 最初に「空のプロジェクト」で作れば普通にDrawStringで文字を表示できるのですが 「Windowsフォーム」を選んでからだと表示できないのはなぜでしょうか? 何がいけないのでしょう。

  • C#のGraphicsクラスについてです。

    C#のGraphicsクラスを用いて画像をフェードインで表示させよとしています。 まず以下のコードをごらんください。 ただ、フェードインで画像は表示されるものの、フォームの操作が一切できなくなってしまいます。 そのためマルチスレッドにしようとしたのですが using System; using System.IO; using System.Windows.Forms; using System.Drawing; using System.Web; using System.Net; using System.Text; using System.Threading; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Diagnostics; public class MainClass{ public static void Main(string [] args){ NewForm formObj = new NewForm(); Application .Run(formObj); } } public class NewForm : Form { //インスタンス変数の宣言 public Graphics g ; public Bitmap mapObj ; public Image imageObj; public ImageAttributes ia; public ColorMatrix cm; public Thread th ; public ParameterizedThreadStart ts; public PaintEventArgs e; public Rectangle rec; public int flag = 0; public delegate void TestDelegate(); public TestDelegate deleObj; public NewForm(){ Button buttonObj = new Button(); buttonObj.Width=100; buttonObj.Height = 30; //フェードさせるためのイベント発行用ボタンの設置 buttonObj.Click += new EventHandler(this.SetMethod); this.Controls.Add(buttonObj); } public void SetMethod(object sender , EventArgs e){ this.Paint += new PaintEventHandler(this.ThreadMethod); //フォームコントロールの再描画を促す this.Invalidate(); } public void ThreadMethod(object sender ,PaintEventArgs eventObj){ this.ts = new ParameterizedThreadStart(this.ThreadRenderMethod); this.th = new Thread(this.ts); this.th.Start(eventObj); MessageBox.Show("ThreadMethod実行後"); MessageBox.Show(InvokeRequired.ToString()); this.th.Join(); } public void ThreadRenderMethod(object paintObj){ MessageBox.Show(InvokeRequired.ToString()); this.deleObj =delegate(){ //無現ループしてしまうので、再描画イベント後イベントハンドラーを削除 this.Paint -= new PaintEventHandler(this.ThreadMethod); PaintEventArgs e = (PaintEventArgs)paintObj; try{ Console.WriteLine("paint メソッド発生"); this. g = e.Graphics; this.mapObj = new Bitmap(this.Width,this.Height); this.imageObj = Image.FromFile("C:\\c#\\test.jpg"); //this.g = Graphics.FromImage(this.mapObj); this.cm = new ColorMatrix(); this.cm.Matrix00 = 1; this.cm.Matrix11 = 1; this.cm.Matrix22 = 1; this.cm.Matrix33 = 0.0F; this.cm.Matrix44 = 1; this.ia = new ImageAttributes(); this.ia.SetColorMatrix(this.cm); this.rec = new Rectangle(0, 0, this.Width, this.Height); this.g.DrawImage(this.imageObj,rec,0,0,this.imageObj.Width,imageObj.Height,GraphicsUnit.Pixel,this.ia); this.BackgroundImage = mapObj; for(double i = 0.0; i <= 1.0; i = i + 0.001){ this.cm.Matrix33 = (float) i; this.ia.SetColorMatrix(this.cm); this.g.DrawImage(this.imageObj,rec,0,0,this.imageObj.Width,imageObj.Height,GraphicsUnit.Pixel,this.ia); this.BackgroundImage = this.mapObj; Thread.Sleep(100); } //this.imageObj.Dispose(); //this.g.Dispose(); }catch(Exception ex){ Console.WriteLine(ex.ToString()); } Console.WriteLine("paint end"); }; this.deleObj(); //this.Invoke(this.deleObj); this.BackgroundImage = Image.FromFile("C:\\c#\\test.jpg"); } } 上記コードでも、フェードは動作するものの、やはりフォームの操作ができなくなります。 どう対処したらよいでしょうか? 識者の方、よろしくご教授ください お願いいたします

  • 【VB2008】 .MouseEnter時にe.Graphics.DrawString~をする方法

     今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします.  ボタンの文字を見やすくするため影付き文字にいたしておりますが (下のコード1になります),このボタンにMouseEnterした際に, クリックできることが分かりやすいよう影の色を変えようと思ったのですが やり方が見つけられません...  <コード1>  Private Sub Button1_Paint(ByVal sender As   Object, ByVal e As System.Windows.Forms.PaintEventArgs) _   Handles Button1.Paint     e.Graphics.DrawString("TEST", _     New Font("MS Pゴシック", 10), Brushes.Black, 81, 11)     e.Graphics.DrawString("TEST", _     New Font("MS Pゴシック", 10), Brushes.Red, 80, 10) End Sub  <トライしたコード>  Private Sub Button1_MouseEnter(ByVal sender As   Object, ByVal e As System.EventArgs) _   Handles Button1.MouseEnter     e.Graphics.DrawString("Test", _     New Font("MS Pゴシック", 10), Brushes.White, 81, 11)     e.Graphics.DrawString("Test", _     New Font("MS Pゴシック", 10), Brushes.Red, 80, 10)  End Sub  エラー「'Graphics'は'System.EventArgs'のメンバではありません」と なるのは当然だと思うのでございますが,引数「e As ~」を書き直すなどいたしましても 通りませんorz  別の方法で「.Paint時に描いた文字色はそのままで,.MouseEnter時に .ForeColorを変えれば...」などと考えましたが,ButtonのTextが .Paintで描いた文字より上にくるのでうまくできませんでした...  もしとんちんかんなご質問でしたら申し訳ございません.何かよさそうな 方法がございましたらご紹介いただけないでしょうか.  もしお詳しい方がいらっしゃいましたら,是非ともアドバイスいただきたく お願い申し上げます.

  • 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){ } } } 以上

専門家に質問してみよう