:メッセージボックス、システム側からの必要に応じた再描画の確認、背景画像の描画
テーマ7 メッセージボックス
・フォームアプリケーションにおいてテスト用に短い文字列を表示させたい場合などに便利なのがメッセージボックス ・System.Windows.Forms.MessageBoxクラスの静的メソッドShow(string)に引数として表示させたい文字列を渡すだけで良い ・「OK」ボタンの表示により閉じることができる
演習7 システム側からの必要に応じた再描画の確認
・描画処理のオーバライド(override void OnPaint())において、メッセージボックスを表示しよう ・これにより、システム側からの必要に応じた再描画が行われ、自動的にOnPaint()が呼び出されることを確認しよう ・フォームの一部を画面外に移動させてから、戻す時にシステム側からの必要に応じた再描画が起きて、OnPaint()が呼び出されることがわかる
作成例
//演習7 システム側からの必要に応じた再描画の確認
using System; //C#標準クラス用
using System.Windows.Forms; //C#が提供するApplication、Formクラス用
using System.Drawing; //Sizeクラス用
class Program : Form { //Formクラスの派生クラス
protected override void OnPaint(PaintEventArgs e) { //描画処理のオーバライド
base.OnPaint(e); //元のメソッドの内容を呼び出す
MessageBox.Show("OnPaintが呼ばれた"); //【追加】
}
static void Main() { //実行用メソッド(publicはなくてOK)
Program f = new Program(); //自クラスのインスタンスを生成
f.Text = "Game"; //Form名を設定
f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定
Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成
f.Location = p; //インスタンスプロパティで初期位置を設定
f.FormBorderStyle = FormBorderStyle.FixedSingle; //フォームサイズの固定化
f.ControlBox = false; //コントールボックスの非表示
f.ClientSize = new Size(640, 480); //クライアントサイズの幅と高さを指定
Application.Run(f); //生成済のインスタンスを実行
}
}
テーマ8 フォーム上への画像の描画
・画像ファイルをプロジェクトに配置することで、フォーム上に描画できる ・画像ファイルの形式としてはjpeg、bmp、gifなどに対応している ・描画の手順 ① System.Drawing.Imageクラスの静的メソッドFromFile(string)に、画像ファイル名を渡すと、Imageクラスのオブジェクトが生成される ② 描画処理の中で、System.Drawing.Graphicsクラスの静的メソッドDrawImage(Image, int, int)に、①とX座標、Y座標を渡すと、指定した位置に画像が描画される ・なお、X座標、Y座標はフォームの左上隅を(0,0)とする座標になる ・②で用いるGraphicsクラスのオブジェクトはOnPaintメソッドの引数「PaintEventArgs e」で得られるPaintEventArgsオブジェクトのGraphicsプロパティの戻り値で得る ・よって「e.Graphics.DrawImage(Image, int, int)」と呼び出せば良い
演習8 背景画像の描画
・下記のテスト用画像をプロジェクトの\bin\debugフォルダにダウンロードback.bmp ・この画像をフォームの座標(0,0)に配置しよう
作成例
//演習8 背景画像の描画
using System; //C#標準クラス用
using System.Windows.Forms; //C#が提供するApplication、Formクラス用
using System.Drawing; //Size、Graphics、Imageクラス用
class Program : Form { //Formクラスの派生クラス
Image backi = Image.FromFile("back.bmp"); //【追加】画像ファイルを読み込む
protected override void OnPaint(PaintEventArgs e) { //描画処理のオーバライド
base.OnPaint(e); //元のメソッドの内容を呼び出す
e.Graphics.DrawImage(backi, 0, 0); //【変更】画像をフォーム左上に配置
}
static void Main() { //実行用メソッド(publicはなくてOK)
Program f = new Program(); //自クラスのインスタンスを生成
f.Text = "Game"; //Form名を設定
f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定
Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成
f.Location = p; //インスタンスプロパティで初期位置を設定
f.FormBorderStyle = FormBorderStyle.FixedSingle; //フォームサイズの固定化
f.ControlBox = false; //コントールボックスの非表示
f.ClientSize = new Size(640, 480); //クライアントサイズの幅と高さを指定
Application.Run(f); //生成済のインスタンスを実行
}
}
テーマ9 画像ファイル読込のトラブルへの対応
・画像ファイルの読込においては、エラーの発生時に何も表示されないため、処置が難しい
・そこで、p.323のtry-catchを仕込んでおくと良い
・書式例:
try {
変数 = Image.FromFile(ファイル名);
} catch {
エラー発生時処理
}
演習9 背景画像の描画(エラー対処付き)
・画像ファイルの読み込みをコンストラクタで行うようにしよう ・そして、画像ファイル読込のトラブルへの対応を盛り込み、エラー発生時はメッセージボックスを表示しよう ・この時、catchを「catch (exception e)」とすることで、エラー発生オブジェクトを得ると良い ・このオブジェクトの文字列表現を「e.ToString()」で得てメッセージボックスに表示しよう
提出:演習9
back.bmp
・この画像をフォームの座標(0,0)に配置しよう