none
DateTimePickerのCheckedの扱いについて RRS feed

  • 質問

  • 「Visual C# Express Edition フォーラム」にて既に登録済である「DateTimePickerのCheckedの扱いについて 」と同様のことを、Visual Basic2005で実現したいと考えています。

    実現したい内容は、下記の通りです。 

    ところが、Visual C♯はおろか、VB2005も全くの初心者で、Visual C♯からVB2005への書き換えが、うまくできません。大変厚かましい申し出ですが、どなたか、VB2005への書き換えができる方、いらっしゃいませんか?どのように書いたら良いのか、ご教示いただけませんでしょうか。よろしくお願いいたします。

     

    ------------------------------------------------------------------------------------------------------------

    流用元↓:

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=403715&SiteID=7

    -------------------------------------------------------------------------------------------------------------

    実現したい内容↓:

    データベースの日付項目とDateTimePickerをデータバインドで結び付けています。

    DateTimePickerのCheckedがTrueの時はDateTimePickerの日付を、
    Falseの時はNullをデータベースに差し戻したいと思っています。

    CheckedがTrueでもFalseでも、DateTimePickerのValueは選択されている
    日付などが入ってしまうのですが、どのようにしたらよいでしょうか?

    -------------------------------------------------------------------------------------------------------------

    (VC♯での質問者であるassitaさん、言語間をまたいでスレッドに統一性を持たせたいと思ったため、申し訳ありませんが、質問内容をそのまま流用させていただきました。本当に申し訳ありません。)

    -------------------------------------------------------------------------------------------------------------

    VB2005に書き換えたいVC♯のソース↓:

    public class NullableDateTimePicker : System.Windows.Forms.DateTimePicker
    {
        private bool IsReturnDBNull;

        public NullableDateTimePicker() : base()
        {
            this.ValueChanged += new EventHandler(NullableDateTimePicker_ValueChanged);
           
        }

        public void SetDBValue(object _Value)
        {
            if (_Value == DBNull.Value)
            {
                this.IsReturnDBNull = true;
            }
            else
            {
                this.IsReturnDBNull = false;
                base.Value = Convert.ToDateTime(_Value);
            }
        }

        [Bindable(true), Browsable(true)]
        public new object Value
        {
            get
            {
                if (IsReturnDBNull)
                {
                    return DBNull.Value;
                }
                else
                {
                    return base.Value;
                }
            }
            set
            {
                this.SetDBValue(Value);
            }
        }
       
        private void NullableDateTimePicker_ValueChanged(object sender, System.EventArgs e)
        {
            if (this.Checked)
            {
                this.SetDBValue(((DateTimePicker)(sender)).Value);
            }
            else
            {
                this.SetDBValue(DBNull.Value);
            }
        }
    }

     

    うまく動いたようだったんですが、レコードが移動して、一番最初にチェックボックスのチェックを外した時に、なぜかうまく動きません。
    原因をいろいろと探ってみたのですが、ちょっとわからず(^^;
    一番最初のチェックを外す時以外はうまく動くので、しょうがないので、BindingSourceを以下のようにして逃げてみました。Orz
    でも、一応はうまく動いているようです。 

    private void tEST2BindingSource_PositionChanged(object sender, EventArgs e)
    {
        this.dateTimePicker2.Checked = !this.dateTimePicker2.Checked;
        this.dateTimePicker2.Checked = !this.dateTimePicker2.Checked;
    }
    

    -------------------------------------------------------------------------------------------------------------

     

    以上、どうかよろしくお願いいたします。

     

     

    2006年8月17日 7:40

回答

  • 自己レスです。

    当初、DateTimePickerにNullをセットするために、
    Checkedの機能を利用したいと考えていました。

    ですが、NullをセットできるDateTimePickerコントロールを
    作成することで対応することにいたしましたので、
    当案件は完了とさせていただきたいと思います。

    ありがとうございました。

    2006年8月25日 2:00