連載:.NETグリッド・コントロール大研究

第2回 DataGridViewコントロールでマインスイーパ

デジタルアドバンテージ 遠藤 孝信
2006/10/21
Page1 Page2 Page3 Page4

 前回ではDataGridViewコントロール(以下、DGVコントロール)のオブジェクト構造について解説し、行や列の生成と、それらをDGVコントロールに追加するための基本的なプログラミングについて解説した。そしてDGVコントロールを表示する簡単なサンプル・プログラムを作成した。

 DGVコントロールには大きく以下の2つのモードがある。

  • 連結モード(バインド・モード)
  • 非連結モード(非バインド・モード)

 前回のサンプル・プログラムは、後者の非連結モードを利用した例である。今回はまずはこの2つのモードについて簡単に説明し、その後で非連結モードの応用例として別のサンプル・プログラムを作っていく。

連結モードと非連結モード

 「連結モード」は、.NET Framework 1.xのころのDataGridコントロールと同様に、データベースから取得したレコードで満たされたデータセットをDGVコントロールに「データ連結(Data Binding)」し、データセットの内容をグリッド表示するモードだ。


DGVコントロールの連結モード
データセットと連結することにより、データセットの内容をDGVコントロールのグリッドに自動的に反映できる。また逆に、グリッド上での編集結果をデータセットに反映できる。なおこの図では省略しているが、.NET Framework 2.0では通常はDGVコントロールとデータセットとの間にBindingSourceコントロールを使用する。

 連結モードでは、DGVコントロールのDataSourceプロパティに、データソースとなるデータセット(あるいはコレクション、配列など)を指定するだけで、その内容が表形式で表示される。つまり、データソースのレコードやデータに従って、DGVコントロール内に行オブジェクトが自動的に作成されるわけだ(デフォルトでは列オブジェクトも自動作成される)。

 またDGVコントロールは、データソースを指定しなくても利用できるようになっている。これが「非連結モード」だ。こちらのモードでは列オブジェクトと行オブジェクトをコードにより作成し、自由にデータを表示できる。前回のサンプル・プログラムではこれを行った。

■データバインド列と非バインド列

 データ連結の観点からは、DGVコントロールの列にも2つの種類がある。

 連結モードでは、グリッドの各列は、データソース内の列(データソースがコレクションや配列の場合には、その要素の特定のプロパティ)に対応付けられている。そのような列は「データバインド列」と呼ばれる。

 一方、データソース内の列に対応付けられていない列は「非バインド列」と呼ばれる。当然ながら、非連結モードではすべての列が非バインド列になる。

 ただし、連結モードでもすべての列がデータバインド列である必要はなく、非バインド列をDGVコントロールに追加することもできる。通常、この場合には非バインド列のセルには、データバインド列のセルから求められた値を表示する。例えば「合計値列」として使用する非バインド列のセルでは、セルが表示されるタイミングで、その行のほかのセルの値の合計値を求めて表示する。

DGVコントロールを使ったマインスイーパ「Gridスイーパ」

 今回は非連結モードの応用例として、DGVコントロールを使ったマインスイーパである「Gridスイーパ」を作ってみようと思う。マインスイーパをご存じない方はいないと思うが、Windowsの[スタート]メニューの[すべてのプログラム]−[ゲーム]−[マインスイーパ]で起動する爆弾撤去ゲームだ。

 本物のマインスイーパでは、そのゲーム・フィールドをすべてビットマップで表示しているが、Gridスイーパではフィールド表示にグリッドを利用する。以下がGridスイーパの実行画面だ。




 
実行中のGridスイーパの画面(上:ゲーム中、左下:失敗時、右下:成功時)

 このGridスイーパでは、マウスのクリックや[スペース]キーにより、セルを開いていく。間違って爆弾のあるセル(爆弾セル)を開くと撤去失敗であり、爆弾セルを赤色で表示する(上記画面左下)。爆弾セル以外のすべてのセルを開ければ、爆弾セルが緑色で表示され、撤去成功となる(上記画面右下)。また、[F2]キーを押すことにより、いつでもゲームを再スタートすることができる。

 なおコードを極力短くするため、マインスイーパにはある以下のような機能は実装しない。

  • 旗が立てられない
  • 時間制ではない
  • 数字の色が全部同じ

 以下にGridスイーパの全コード(Visual Studio 2005のプロジェクト)をダウンロードできるようにした(ソース・コードについては次ページにも掲載している)。

 VB版Gridスイーパのダウンロード
 C#版Gridスイーパのダウンロード

 ではさっそくプログラミングしていこう。


 INDEX
  .NETグリッド・コントロール大研究
  第2回 DataGridViewコントロールでマインスイーパ
  1.連結モードと非連結モード
    2.フォームの設定とソース・コード
    3.DGVコントロールとゲーム・フィールドの初期化/セルの選択を禁止
    4.セルのクリック処理/キー入力の処理/セルのオープン
 
インデックス・ページヘ  「.NETグリッド・コントロール大研究」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

.NET開発者中心に生まれ変わりました

.NET開発者中心コーナー

- PR -

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH