「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;
}
-------------------------------------------------------------------------------------------------------------
以上、どうかよろしくお願いいたします。