C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: DateTimePickerのデータバインド時の動作


(過去ログ 119 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■69608 / inTopicNo.1)  DateTimePickerのデータバインド時の動作
  
□投稿者/ コージ (1回)-(2014/01/13(Mon) 11:23:26)

分類:[C#] 

2014/01/13(Mon) 11:39:31 編集(投稿者)
2014/01/13(Mon) 11:37:47 編集(投稿者)
2014/01/13(Mon) 11:37:30 編集(投稿者)

<pre><pre>Formアプリで、DataTimePickerおよびNumericUpDownコントロールを自分で定義したクラスオブジェクトへバインドした場合の動作が、
期待していた動作と違うので教えてください。

やりたいことは、
自作Personクラスを定義し、FormにPersonオブジェクトの各メンバに対応するコントロールを配置して、
入力された内容をデータバインドにてPersonオブジェクトに反映させることです。

具体的には、Personクラスに、「名前」「誕生日」「年齢」プロパティを用意し、Formには
名前(TextBox)、誕生日(DatetimePicker)、年齢(NumericUpDown)の各コントロールを張り付けます。

コードはこんな感じです。
○Personクラス
    class Person
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private DateTime _birthDay;
        public DateTime BirthDay
        {
            get { return _birthDay; }
            set { _birthDay = value; }
        }

        private decimal _age;
        public decimal Age
        {
            get { return _age; }
            set { _age = value; }
        }
        
        public Person()
        {
            _birthDay = new DateTime(2014, 1, 20);
        }

    }

○入力用フォーム
    public partial class Form1 : Form
    {
        private Person hoge = new Person();

         private void Form1_Load(object sender, EventArgs e)
        {
            bindingSource1.DataSource = hoge;  // デザイナでフォームに貼り付けてある
            txtName.DataBindings.Add("Text", bindingSource1, "Name");        // 名前
            dateTimePicker1.DataBindings.Add("Value", bindingSource1, "BirthDay");   // 誕生日
            numericUpDown1.DataBindings.Add("Value", bindingSource1, "Age");         // 年齢
        }
    }

上記コーディングで、
データバインディング機能により、コントロールからフォーカスが離れたとき(離れようとするとき?)に、
Personクラスのセッターメソッドが呼ばれ、クラスオブジェクトのメンバに値が設定されると考えていました。
 
しかしながら、たとえば
dateTimePicker1で1月をキーボードの「2」キー押下により2月に変更した後、
ほかのコントロールへ移動してもPersonの誕生日セッターメソッドが呼び出されません。(ブレークポイントを設定して確認)
続けてdateTimePicker1にフォーカスを戻して何の変更も行わずにフォーカスを移動すると、変更していないのにセッターメソッドが呼ばれます。

1月を「矢印」キー押下で2月に変更したときは、期待通りに動きます。


それで教えていただきたいのですが、
これってコーディングで何か抜けていることがありますか?
この現象を回避するにはどのようにしたら良いでしょうか。

よろしくお願いいたします。(NumericUpDownでも同様の動きでした。)

</pre></pre>

引用返信 編集キー/
■69609 / inTopicNo.2)  Re[1]: DateTimePickerのデータバインド時の動作
□投稿者/ WebSurfer (161回)-(2014/01/13(Mon) 11:38:39)
No69608 (コージ さん) に返信

ご自分の環境(OS, .NET Framework, Visual Studio のバージョンなど)ぐらいは最初に書けませんか?
引用返信 編集キー/
■69610 / inTopicNo.3)  Re[2]: DateTimePickerのデータバインド時の動作
□投稿者/ コージ (2回)-(2014/01/13(Mon) 11:43:54)
No69609 (WebSurfer さん) に返信
> ■No69608 (コージ さん) に返信
>
> ご自分の環境(OS, .NET Framework, Visual Studio のバージョンなど)ぐらいは最初に書けませんか?

すみません。
環境は
Windows7
VisualStudio2010 Express
.NET Framework 4 Client Profile

です。


引用返信 編集キー/
■69756 / inTopicNo.4)  Re[3]: DateTimePickerのデータバインド時の動作
□投稿者/ コージ (4回)-(2014/01/27(Mon) 23:48:39)
No69610 (コージ さん) に返信
> ■No69609 (WebSurfer さん) に返信
>>■No69608 (コージ さん) に返信
>>
>>ご自分の環境(OS, .NET Framework, Visual Studio のバージョンなど)ぐらいは最初に書けませんか?
>
> すみません。
> 環境は
> Windows7
> VisualStudio2010 Express
> .NET Framework 4 Client Profile
>
> です。
>
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -