• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Graphicsプロパティ)

Graphicsプロパティについて

このQ&Aのポイント
  • Graphicsプロパティは、描画を行うために必要なインスタンスを定義するためのものです。
  • Graphicsクラスは、GDI+(Graphics Device Interface)を使用してウィンドウに描画するための機能を提供します。
  • 具体的には、Pea.Graphicsは、描画イベントの引数として渡されるPaintEventArgsクラスの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