2012年9月18日火曜日

[C++/CLI] イベント関数の引数についてくるobjectを各コンポーネントにしてみる

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


たとえば DateTimePicker を使用して期間を指定できるデザインの画面の場合・・・
2種類あったら合計4イベント書くことになるけど、これを使えば1つのイベントを使いまわせる。

System::Void DateValueChanged(System::Object^  sender, System::EventArgs^  e)
{
    System::Windows::Forms::DateTimePicker^  dtWork;
    System::Windows::Forms::DateTimePicker^  dtFrom;
    System::Windows::Forms::DateTimePicker^  dtTo;

    dtWork = safe_cast(sender);

    // 呼び出し元のコンポーネントを判断し、処理対象となるコンポーネントを選定する
    if((dtWork->Name == Date1From->Name) || (dtWork->Name == Date1To->Name))
    {
        dtFrom = Date1From;
        dtTo = Date1To;
    }

    if((dtWork->Name == Date2From->Name) || (dtWork->Name == Date2To->Name))
    {
        dtFrom = Date2From;
        dtTo = Date2To;
    }

    // ・From, To 共に有効な場合 From < To となるように入力後にデータ確認を行う。
    // ・どちらか片方のみ有効の場合は入力制約を設けない。
    // ・片側入力から両側入力になった場合、後から有効になったコンポーネントの指定日付を
    //  先に有効であったコンポーネントの指定日付と合わせる。
    if((dtFrom->Checked && dtTo->Checked) && (dtFrom->Value > dtTo->Value))
        if(dtWork->Name == dtFrom->Name)
            dtFrom->Value = dtTo->Value;
        else
            dtTo->Value = dtFrom->Value;
}

0 件のコメント:

コメントを投稿