第21回 データグリッドを使ってみよう | トニー電の.NETプログラミング講座

トニー電の.NETプログラミング講座

技術メルマガ(techmaga.com)のアメブロ準備版です。
一応、期間限定ってことで。

Hello everybody !!! 皆さん、C# programing 頑張っていますか?

皆さんと一緒に .NET プログラミングを学んでいく、「トニー電」です。今日も張り切っていきましょう。

今週は、先週作った住所録のアプリケーションをもう少し拡張していきましょう。

よくある住所録では、名前に一覧が表示されますよね。この一覧を表示するためには、C# でデータグリッドビュー(DataGridView)という便利なコントロールがあります。これを使って、色々と実装していきます。

■一覧表示をする画面を作る

右側のソリューションエクスプローラーから、プロジェクトを右クリックして「追加」→「Windows フォーム」を選択します。

image

ファイル名を「FormList.cs」に変更します。

image

ツールボックスから、「DataGridView」をフォームにドロップします。

image

ここでは、表示だけに使うので「追加」、「編集」、「削除」のチェックを外します。

image

プロパティ ウィンドウで「Dock」の値を「Fill」に変更します。こうすることで、フォーム一杯に表示されるようになります。

image

これで、住所録の一覧を表示する画面はできあがりです。フォーム一杯にデータグリッドが表示されている状態なので、一瞬何をしていいのか分かりづらいですが、まぁ、ボタンやメニューなどは後から必要に応じてつけていきましょう。

■スタート画面を設定する

そのままデバッグ実行をすると、住所録を入力するための画面が最初に出てきてしまいます。折角、一覧の画面ができたので、一覧の画面を最初に表示されるようにしましょう。

最初に表示されるページは、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()」に変更します。


これをデバッグ実行すると、無事(?)データグリッドの真っ黒な画面が表示されます。


image


 


■背景画面が設定できるデータグリッドに変える


実は、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」という独自のコントロールが現れます。これを再び、フォームにドロップして大きさを調節してください。


image


プロパティ ウィンドウを見ると「BackgroundImage」プロパティが増えているので、ここで画像を設定します。


image


ローカル リソースとして、コンピューターから画像を選べば ok です。


image


デザイン時にも設定されます。


image


画像ファイルを設定しないときは、BackgroundImage プロパティを選択して 「System.Drawing.Bitmap」の文字列を削除します。すると、画像が消えますよ。


 


明日はこのデータグリッドを使って、一覧を作っていきましょう。


では、See you next week, bye bye !!!