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

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

NEW !
テーマ:

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

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

今日は、第19回などで作った詳細画面をデータグリッドから開けるようにします。

データグリッドで名前をダブルクリックしたときに、詳細画面が開かれるようにしましょう。

■CellDoubleClick イベントで詳細画面を表示する

データグリッドのセルをダブルクリックしたときのイベントは、CellDoubleClick イベントになります。

/// <summary>
/// セルをダブルクリックして詳細画面を表示する
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridViewEx1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    int row = e.RowIndex;
    if ( row < 0 )
        return;

    FormCard frm = new FormCard();
    frm.Address = _addr[row];
    frm.ShowDialog();
}

詳細表示をする FormCard クラスには、あらかじめ住所データを渡す Address プロパティが作ってあります。このプロパティに、ダブルクリックをした行の住所データを入れて、詳細画面を開きます。


詳細画面のフォームロード イベントに、Address プロパティからテキストボックスにコピーするコードをいれておきます。

/// <summary>
/// フォームロード時
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormCard_Load(object sender, EventArgs e)
{
    Address addr = this.Address;
    textRuby.Text = addr.ruby;
    textName.Text = addr.name;
    comboKind.Text = addr.kind;
    textZipCode.Text = addr.zipcode;
    textAddress1.Text = addr.addrss1;
    textAddress2.Text = addr.addrss2;
    textTelephone.Text = addr.telephone;
    textFax.Text = addr.fax;
    textKtai.Text = addr.ktai;
    textMail.Text = addr.mail;
}

■まずは、開くところまでデバッグ実行


デバッグ実行をしてみましょう。あらかじめ作成した XML 形式のファイルをドロップして、適当な行をダブルクリックしてください。


うまく詳細データが表示できましたか?


image


image


「分類」と「電話番号」を書き換えて、登録ボタンをクリックしてみましょう。このままでは、変更した結果がデータグリッドに反映されないので、その部分をコーディングしていきましょう。


■詳細画面の変更を反映

/// <summary>
/// セルをダブルクリックして詳細画面を表示する
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridViewEx1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    int row = e.RowIndex;
    if (row < 0)
        return;

    FormCard frm = new FormCard();
    frm.Address = _addr[row];
    frm.ShowDialog();
    // データグリッドに反映
    _addr[row] = frm.Address;
    dataGridViewEx1.Refresh();
}

変更の反映は、詳細画面の Address プロパティの値を、データグリッドに設定しているリストに書き戻すだけです。非常に簡単ですね。


実際に、デバッグ実行して詳細画面での変更が反映されるか確認してみましょう。


image


image


■キャンセルボタンを付ける


詳細画面で項目を編集していても、左上の「×」ボタンを押すと編集はキャンセルされます。これは、このままでよいのですが、ユーザーインターフェースとしては、「キャンセル」ボタンを新たに付け加えましょう。


あと、デバッグ用に作った「保存」ボタンと「読込」ボタンは、不可視にして(見えないようにして)隠しておきましょう。見えないようにする場合は、プロパティ ウィンドウで、Visuble の値を「false」にします。


image


キャンセルボタンのコードは、フォームを閉じる Close メソッドを呼ぶだけです。

/// <summary>
/// キャンセルボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
    Close();
}

フォームの DialogResult プロパティは、メッセージボックスのように画面が「OK」ボタンで終了したのか、「キャンセル」ボタンが押されたのか、をチェックするためのプロパティです。


登録ボタンのクリックイベントにも追加しておきましょう。

/// <summary>
/// 登録ボタンをクリック
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCommit_Click(object sender, EventArgs e)
{
    // 住所データを画面から作成
    Address addr = new Address
    {
        ruby = textRuby.Text,
        name = textName.Text,
        kind = comboKind.Text,
        zipcode = textZipCode.Text,
        addrss1 = textAddress1.Text,
        addrss2 = textAddress2.Text,
        telephone = textTelephone.Text,
        fax = textFax.Text,
        ktai = textKtai.Text,
        mail = textMail.Text
    };
    this.Address = addr;
    this.DialogResult = DialogResult.OK;
    this.Close();
}

こうしておくと、詳細画面の呼び出し元(この場合は、データグリッドがあるメイン画面)では、フォームの戻り値を DialogResult.OK などでチェックすることができます。

/// <summary>
/// セルをダブルクリックして詳細画面を表示する
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridViewEx1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    int row = e.RowIndex;
    if (row < 0)
        return;

    FormCard frm = new FormCard();
    frm.Address = _addr[row];
    if (frm.ShowDialog() == DialogResult.OK)
    {
        // データグリッドに反映
        _addr[row] = frm.Address;
        dataGridViewEx1.Refresh();
    }
}

■デバッグ実行をして動作を確認する


では、デバッグ実行をして、動作を確認してみてください。登録ボタンをクリックした時は、入力データが反映されますが、キャンセルボタンの時は入力データは破棄されますね。


image


 


さて、フォームをいくつか変更してきましたが、どうでしたか?


来週からは、再び文法に戻って、C# の細かい部分を学習していきましょう。


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



Amebaおすすめキーワード