Hello everybody !!! 皆さん、C# programing 頑張っていますか?
皆さんと一緒に .NET プログラミングを学んでいく、「トニー電」です。今日も張り切っていきましょう。
今週は、先週作った住所録のアプリケーションをもう少し拡張していきましょう。
よくある住所録では、名前に一覧が表示されますよね。この一覧を表示するためには、C# でデータグリッドビュー(DataGridView)という便利なコントロールがあります。これを使って、色々と実装していきます。
■一覧表示をする画面を作る
右側のソリューションエクスプローラーから、プロジェクトを右クリックして「追加」→「Windows フォーム」を選択します。
ファイル名を「FormList.cs」に変更します。
ツールボックスから、「DataGridView」をフォームにドロップします。
ここでは、表示だけに使うので「追加」、「編集」、「削除」のチェックを外します。
プロパティ ウィンドウで「Dock」の値を「Fill」に変更します。こうすることで、フォーム一杯に表示されるようになります。
これで、住所録の一覧を表示する画面はできあがりです。フォーム一杯にデータグリッドが表示されている状態なので、一瞬何をしていいのか分かりづらいですが、まぁ、ボタンやメニューなどは後から必要に応じてつけていきましょう。
■スタート画面を設定する
そのままデバッグ実行をすると、住所録を入力するための画面が最初に出てきてしまいます。折角、一覧の画面ができたので、一覧の画面を最初に表示されるようにしましょう。
最初に表示されるページは、Program.cs ファイルに書かれています。
namespace TonyAddressBook
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormCard());
}
}
}
「new FormCard()」で、最初のフォームを表示しているので、この部分を「new FormList()」に変更します。
これをデバッグ実行すると、無事(?)データグリッドの真っ黒な画面が表示されます。
■背景画面が設定できるデータグリッドに変える
実は、DataGridView コントロールには、背景画像を指定する BackgroundImage プロパティがあるのですが、うまく機能していません。しかし、ちょとだけ小細工することで、きれいな背景画像を表示できます。
MSDN の DataGridView.BackgroundImage プロパティ (System.Windows.Forms) の記述を見ると、BackgroundImage プロパティはあるのですが、protected メソッドと呼ばれる、「外部から見えない」プロパティになっています。この外部から見えないということは、「プロパティ ウィンドウからは設定」できないということになります。(正確にはちょっと違うのですが、まぁ、同じことです)。
フォームのコードに次のように追加します。
/// <summary>
/// 背景画像が設定できるグリッド
/// </summary>
public class DataGridViewEx : DataGridView
{
/// <summary>
/// 背景プロパティ
/// </summary>
[Browsable(true)]
public override Image BackgroundImage
{
get
{
return base.BackgroundImage;
}
set
{
base.BackgroundImage = value;
}
}
protected Brush _br;
/// <summary>
/// 背景を描画する
/// </summary>
/// <param name="graphics"></param>
/// <param name="clipBounds"></param>
/// <param name="gridBounds"></param>
protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds)
{
if (this.BackgroundImage != null)
{
if (_br == null)
{
_br = new TextureBrush(this.BackgroundImage);
}
graphics.FillRectangle(_br, new Rectangle(new Point(0, 0), this.Size));
}
else
{
base.PaintBackground(graphics, clipBounds, gridBounds);
}
}
}
コードを記述した後に、ビルドをすると、ツールボックスに「DataGridViewEx」という独自のコントロールが現れます。これを再び、フォームにドロップして大きさを調節してください。
プロパティ ウィンドウを見ると「BackgroundImage」プロパティが増えているので、ここで画像を設定します。
ローカル リソースとして、コンピューターから画像を選べば ok です。
デザイン時にも設定されます。
画像ファイルを設定しないときは、BackgroundImage プロパティを選択して 「System.Drawing.Bitmap」の文字列を削除します。すると、画像が消えますよ。
明日はこのデータグリッドを使って、一覧を作っていきましょう。
では、See you next week, bye bye !!!