SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
東南アジアをバックパッカーしながら転職活動をした記録
東南アジアをバックパッカーしながら転職活動をした記録
7年目で初の転職活動 2カ月で内定獲得した記録
7年目で初の転職活動 2カ月で内定獲得した記録
おすすめのプログラミングスクール めざせ就職・年収アップ!
おすすめのプログラミングスクール めざせ就職・年収アップ!
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
ブログ開始3年が経った月収が1万超えてた!
ブログ開始3年が経った月収が1万超えてた!
プログラミング独学・スクール・就職(目次)
プログラミング独学・スクール・就職(目次)
previous arrowprevious arrow
next arrownext arrow
 
Shadow
C#/VB.net

C#で画面遷移(子画面など)でデータを渡す方法

画面の遷移をした最のデータの渡し方を紹介します。

簡単にできそうで、意外と書き方を忘れてしまうので、備忘録のためにも残しておきます。

実際に作ったファイルはこちらからダウンロードできます。

画面遷移とデータ渡しの概要

やることは、上のようにデータ渡しです。

流れはこんな感じです。

①子画面を立ち上げる

②選択したカレンダーの日付を選ぶ

③元画面のテキストボックスに日付が反映する

元画面から子画面への遷移するときのコード

子画面を開くコードとデータを元画面に渡すコードです。

まずはテキストボックスがクリックされたときに子画面を開くコードです。

以下は元画面のコードです。

        /// <summary>
        /// テキストボックスをクリック時
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBox1_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                //フラグがfalseの(子画面が開かれていない)場合
                if (isSmallFrmOpened.Equals(false))
                {
                    //子画面オープンフラグを立てる
                    isSmallFrmOpened = true;

                    string strDate = "";                                       //選択日を格納
                    string selectedDate = "";                                  //登録されている日を格納
                    DateTime date;                                             //[日付]のTryParse返却値格納用

                    //日付がテキストボックスに入力されていれば、カレンダーの子画面へセットする

                    //日付Fromの場合
                    if (textBox1.Focused)
                    {
                        //日付に変換できる場合
                        if (DateTime.TryParse(textBox1.Text, out date))
                        {
                            //値をセット
                            selectedDate = textBox1.Text.Replace("年", "/").Replace("月", "/").Substring(0, 10);
                        }
                    }

                    //カレンダーを表示する
                    FrmCalender fCalender = new FrmCalender(selectedDate);
                    fCalender.ShowDialog();
                    strDate = fCalender.selectedDate;

                    //テキストボックスへ値をセット
                    textBox1.Text = strDate;
                    //選択状態を消す
                    textBox1.SelectionStart = 0;
                }

                //子画面オープンフラグを戻す
                isSmallFrmOpened = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

説明

20~31行目はテキストボックスの値が日付型に変換できる場合は、日付に変換しています。

そして、カレンダーの子画面を開くときの引数にセットしています。

テキストボックスの値を元にカレンダーの初期値がセットできるようにしています。

35行目でカレンダーの子画面を開いています。

そして38行目でカレンダーの子画面が閉じたときに元画面で値を受け取って、テキストボックスにセットしています。

子画面から元画面へ遷移するときのコード

子画面が閉じるときに画面のプロパティを使って、元画面にデータを渡すプログラムです。

FrmCalenderは以下のように作られています。

子画面のコードです。

※selectedDt(date型)の変数はどこにグローバル変数として書いておいてください。

フォームロード

画面を開いた時に現在日になるようにしています。

/// <summary>
/// フォームロード時の処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmCalender_Load(object sender, EventArgs e)
{
    //現在日付をカレンダーにセット
    monthCalendar1.SetDate(DateTime.Now);

    //カレンダーから日付を取得
    selectedDt = monthCalendar1.SelectionRange.Start.ToShortDateString();
    selectedDt = monthCalendar1.SelectionRange.Start.ToString("yyyy年MM月dd日(ddd)");
}

子画面にプロパティの作成

子画面のプロパティを作成しておくことで、子画面から元画面へ値を返すことができます。

//カレンダー日付を取得、設定するためのプロパティ
public string selectedDate
{
    get
    {
        return selectedDt;
    }
    set
    {
        selectedDt = value;
    }
}

カレンダーの日付選択時

日付選択時に変数selectedDt にセットする処理です。

/// <summary>
/// カレンダーの日付が選択された時
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
    //カレンダーから日付を取得
    selectedDt = monthCalendar1.SelectionRange.Start.ToShortDateString();
    selectedDt = monthCalendar1.SelectionRange.Start.ToString("yyyy年MM月dd日(ddd)");
}

元画面にプロパティを使って値を渡す

selectedDateのプロパティに日付を渡して、画面を閉じています。

/// <summary>
/// 確定ボタン押下時
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonConfirm_Click(object sender, EventArgs e)
{
    //日付未選択の場合
    if(selectedDt.Equals(""))
    {
        MessageBox.Show("日付が選択されていません。");
        return;
    }

    //プロパティにセット
    selectedDate = selectedDt;
    this.Dispose();
}

 

これで完了です。

画面遷移の値渡しを実行した結果

実行した結果の画面遷移とデータ渡し結果はこんな感じになります。

①日付FROMをクリックするとカレンダーの子画面が立ち上がります。

※開いたときの現在日がデフォルトでは設定されています。

②10/30を選択して確定ボタンを押すと日付FROMのテキストボックスに10/30がセットされています。

今回はここまでです。

他にも使えそうな処理があれば、趣味で作ったプログラムから抜粋で紹介していきます。

C#アプリ開発 メールお知らせアプリ 開発案件の経験は2案件ほどで、ほとんど経験ありません。 そんな私が独学でプログラミングの勉強をしてきました。 そこで...
ABOUT ME
LooseCarrot
LooseCarrot
ブログ運営をしているLooseCarrotです。 興味のあることにトライして発信していきます! プロフィール

関連している記事