![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
例えば
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.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.w …
ある型の変数に全く同じ型の値を代入可能であることに何の不思議もありません。
> コンソールアプリをたくさん作ってもイベントドリブンはわからないと思います。
> ましてデバイスコンテキストなど
あなたのおっしゃる通り、イベントドリブンやデバイスコンテキストなどの知識はコンソールアプリでは身に着けるのは困難でしょう。
しかし、逆にイベントドリブンやデバイスコンテキストなどの知識だけがあってもプログラムは組めません。
それらは単に部品に過ぎず、それらを意図したとおりに配置し処理をさせる必要があります。
そのような組み立てのスキルを磨くうえでは、GUIプログラミングでは動かすのに必要なコードの量が多すぎ、本質的な部分がその他の部分に紛れてしまいます。
だから、基本的な構文をマスターする上では、動かすのに必要なコード量が少ないコンソールアプリが最適なのです。
No.9
- 回答日時:
> このプロパティはディスプレイデバイスを指していて、だからgetしかできない??
OnPaintは「さあ描け」というフレームワークからの指令です。
そのとき、画材はEventArgs内のGraphicsを使え、とフレームワークが用意してくれたもの。
setすることに意味がないのでsetできないよう定義されています。
この回答への補足
http://msdn.microsoft.com/ja-jp/library/system.w …
描画に使用するグラフィックスを取得します。
この文の「グラフィックス」というのはペンだのフォントだのブラシだの、といった画材、と考えてよいでしょうか。
腑に落ちないのはSystem.Drawing.Graphicsのインスタンスgrfxに
System.Windows.Forms.PaintEventArgs.Graphicsプロパティを代入する、という部分です。
型も違うのにどこのメソッドにどのメソッドが入るとかはわかるのでしょうか?
No.8
- 回答日時:
> 基本の本に書いてある、ということなのですが、もうちょっと具体的に
> なんとか~という本の何ページ目を読め、とか
> URLなどご紹介願えないでしょうか
「情報源を探す」のも技術のうちです。
厳しいことを言うようですが、
何でもかんでも他人に聞かないと進まないようではプログラミングは向いていません。
ここで聞こうが、2chで聞こうが答えは同じでしょう。
この姿勢を改めることがあなたにとっての「最初の壁」かもしれません。
この回答への補足
コンソールアプリをたくさん作ってもイベントドリブンはわからないと思います。
ましてデバイスコンテキストなど
私の手持ちの資料の説明ではGraphics grfx = pea.Graphics;
という一行を
「OnPaintメソッド内でこのGraphicsオブジェクトに対しての描画を行う」
とあります。
あなたがただの初心者叩き趣味でやってるのでないのなら
この文章の説明をしてみてもらえますか?
ネットではさんざん検索しました。私はこの相談箱が信頼性の高い情報源と思っています。
No.7
- 回答日時:
> コンソールのプラグラムですと変数とか繰り返し
> とか本当に基本だけしかのってない本ばかり
> なので良書などご紹介していただけると助かります
……。
はっきり言います。
あなたの今回の質問は、
「基本だけしかのってない本」には必ず書いてあることで、
その内容をきちんと理解しているならば出てこない質問です。
つまり、そのようなセリフが出てくること自体、
『言語の基礎を全く理解していません』
と宣言しているのと同じです。
まずあなたの言う「基本だけしかのってない本」をしっかり読んで、
演習や例題を実際に入力して動かしなさい。
そして、その本に書いてあることを他人にきちんと説明できるようになりなさい。
他の本やGUIプログラミングに手を出すのはそれからです。ූ
この回答への補足
ご指摘ありがとうございます。
基本の本に書いてある、ということなのですが、もうちょっと具体的に
なんとか~という本の何ページ目を読め、とか
URLなどご紹介願えないでしょうか
プログラミングは最初の壁を乗り越えるまでは難しいと思います。2chねるに質問してるのと
同じ回答ではどうにも
No.6
- 回答日時:
> pea.Graphics.DrawString("");
> というのがPaintEventArgsクラスのDrawStringメソッドを
> 呼び出してそれによって文字が描画される、
> ということでしょうか。
NO.
1. peaのプロパティ Graphics を取得し、
2. それのメソッド:DrawStringを呼び出しています。
1,2を分けて書いたのが元のコード。それだけのこと。
http://msdn.microsoft.com/ja-jp/library/system.w …
grfx は System.Drawing.Graphicsクラスのインスタンス(newがないので違う?)
、 それにPaintEventArgsクラスのGraphicsプロパティを代入し、
確信に触れられそうです このプロパティはディスプレイデバイスを指していて、だからgetしかできない??
No.3
- 回答日時:
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イベントは発生します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- デスクトップパソコン NECの分離型PCの購入を考えています。 4 2023/03/14 12:06
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CloseとDisposeの違い
-
C# 超初心者です。 this.Refres...
-
[C#]FormクラスのShowメソッド...
-
コールバックでイベントを使う...
-
Graphicsプロパティ
-
objective-C(Xcode)に関して...
-
objective-cにはCのような関数...
-
OCXのメソッドの引数に文字列を...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
「PC Helpsoft Driver Updated...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
Excelで、ボタンにコメントをつ...
-
UMLでの例外処理
-
UPS警告音を止めたい
-
エクセルVBAで、MsgBox やInput...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CloseとDisposeの違い
-
C# 超初心者です。 this.Refres...
-
[C#]FormクラスのShowメソッド...
-
DLL内のイベントをハンドリング
-
[swift]動的なキーを持つJSONの...
-
C#のインスタンスを参照渡ししたい
-
Try~Catch、Finallyについて。
-
objective-C(Xcode)に関して...
-
Graphicsプロパティ
-
vb.net フォームアプリケーシ...
-
コールバックでイベントを使う...
-
OCXのメソッドの引数に文字列を...
-
フィールド(メンバ変数)のプリ...
-
objective-cにはCのような関数...
-
VB.NET スプラッシュスクリー...
-
クラスの実体を一つにする方法
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
おすすめ情報