- ベストアンサー
Graphicsプロパティについて
- Graphicsプロパティは、描画を行うために必要なインスタンスを定義するためのものです。
- Graphicsクラスは、GDI+(Graphics Device Interface)を使用してウィンドウに描画するための機能を提供します。
- 具体的には、Pea.Graphicsは、描画イベントの引数として渡されるPaintEventArgsクラスのGraphicsプロパティであり、描画に必要なリソースを提供します。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
> この文の「グラフィックス」というのはペンだのフォントだのブラシだの、といった画材、と考えてよいでしょうか。 いや、むしろ「キャンバス」ですね。
その他の回答 (10)
- hitomura
- ベストアンサー率48% (325/664)
> 腑に落ちないのは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プログラミングでは動かすのに必要なコードの量が多すぎ、本質的な部分がその他の部分に紛れてしまいます。 だから、基本的な構文をマスターする上では、動かすのに必要なコード量が少ないコンソールアプリが最適なのです。
お礼
なるほどコンソールアプリのソースも手を動かしていこうと思います。 ありがとうございました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> このプロパティはディスプレイデバイスを指していて、だからgetしかできない?? OnPaintは「さあ描け」というフレームワークからの指令です。 そのとき、画材はEventArgs内のGraphicsを使え、とフレームワークが用意してくれたもの。 setすることに意味がないのでsetできないよう定義されています。
補足
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)
> 基本の本に書いてある、ということなのですが、もうちょっと具体的に > なんとか~という本の何ページ目を読め、とか > URLなどご紹介願えないでしょうか 「情報源を探す」のも技術のうちです。 厳しいことを言うようですが、 何でもかんでも他人に聞かないと進まないようではプログラミングは向いていません。 ここで聞こうが、2chで聞こうが答えは同じでしょう。 この姿勢を改めることがあなたにとっての「最初の壁」かもしれません。
補足
コンソールアプリをたくさん作ってもイベントドリブンはわからないと思います。 ましてデバイスコンテキストなど 私の手持ちの資料の説明ではGraphics grfx = pea.Graphics; という一行を 「OnPaintメソッド内でこのGraphicsオブジェクトに対しての描画を行う」 とあります。 あなたがただの初心者叩き趣味でやってるのでないのなら この文章の説明をしてみてもらえますか? ネットではさんざん検索しました。私はこの相談箱が信頼性の高い情報源と思っています。
- hitomura
- ベストアンサー率48% (325/664)
> コンソールのプラグラムですと変数とか繰り返し > とか本当に基本だけしかのってない本ばかり > なので良書などご紹介していただけると助かります ……。 はっきり言います。 あなたの今回の質問は、 「基本だけしかのってない本」には必ず書いてあることで、 その内容をきちんと理解しているならば出てこない質問です。 つまり、そのようなセリフが出てくること自体、 『言語の基礎を全く理解していません』 と宣言しているのと同じです。 まずあなたの言う「基本だけしかのってない本」をしっかり読んで、 演習や例題を実際に入力して動かしなさい。 そして、その本に書いてあることを他人にきちんと説明できるようになりなさい。 他の本やGUIプログラミングに手を出すのはそれからです。ූ
補足
ご指摘ありがとうございます。 基本の本に書いてある、ということなのですが、もうちょっと具体的に なんとか~という本の何ページ目を読め、とか URLなどご紹介願えないでしょうか プログラミングは最初の壁を乗り越えるまでは難しいと思います。2chねるに質問してるのと 同じ回答ではどうにも
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> pea.Graphics.DrawString(""); > というのがPaintEventArgsクラスのDrawStringメソッドを > 呼び出してそれによって文字が描画される、 > ということでしょうか。 NO. 1. peaのプロパティ Graphics を取得し、 2. それのメソッド:DrawStringを呼び出しています。 1,2を分けて書いたのが元のコード。それだけのこと。
お礼
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)
基礎が足りていません。 まずはコンソールアプリケーションでC#やオブジェクト指向の基礎を固めてください。 GUIはその後です。
補足
ご指摘ありがとうございます コンソールのプラグラムですと変数とか繰り返し とか本当に基本だけしかのってない本ばかり なので良書などご紹介していただけると助かります
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
おっと失礼、 . がひとつ余分です。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
protected override void OnPaint(PaintEventArgs pea) { pea.Graphics..DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } これ↑でもちゃんと動きますか? 動くなら、この文脈に限って言えばgfxは不要です。
補足
動きました。これは、.NetFrameworksのバージョンに関係あるのでしょうか。現在2.0でコンパイルしています。 Graphics grfx = pea.Graphics; がない方がなんとなくこういうことなんだろうなと思えます。つまり pea.Graphics.DrawString(""); というのがPaintEventArgsクラスのDrawStringメソッドを呼び出してそれによって文字が描画される、 ということでしょうか。 pea.Graphics.DrawString("");はなくても問題ないのでしょうか 同じようなものにBase.OnPaint()と記述されているものもありこちらもコメントアウトしてもOnPaintイベントは発生します。
- hitomura
- ベストアンサー率48% (325/664)
> この処理を行うことによってどういう結びつきなどが生まれるのでしょう この処理をコメントアウトした時のエラーメッセージを読みなさい。 それがこの処理が必要な理由を説明しています。
補足
コンテキストがありません・・のようなメッセージが出ました。 もっともgrfxの宣言を消してしまってるのでエラーが出るのは想像つくのですが・・・ 考えてはいるのですがなかなかこれだと思う発想になりません。もう少しヒントを・・・
- hitomura
- ベストアンサー率48% (325/664)
必要な理由がわからないならその部分をコメントアウトしましょう。 そうすればその部分がなぜ必要なのかわかります。
補足
書かなければ動かない、ということはわかります。 でもなぜGraphics grfxに PainEventArgsのインスタンスpeaのGraphicsプロパティを代入するのかがわかりません。 この処理を行うことによってどういう結びつきなどが生まれるのでしょう
お礼
この一言が欲しかったです ありがとうございます。確信に触れられました。 またよろしくお願いします。