nullabe 日時にバインドされたマスクされたテキスト ボックスがありますが、日付が空白になると、マスクされたテキスト ボックスの検証が完了しません。この動作を強制する方法はありますか? 空白のテキスト ボックスを null の DateTime に等しくしたい。
テキスト ボックスが既に null の場合、検証は機能します。日付が既にバインドされていて、それを空白にしようとしたときにのみ壊れます。
nullabe 日時にバインドされたマスクされたテキスト ボックスがありますが、日付が空白になると、マスクされたテキスト ボックスの検証が完了しません。この動作を強制する方法はありますか? 空白のテキスト ボックスを null の DateTime に等しくしたい。
テキスト ボックスが既に null の場合、検証は機能します。日付が既にバインドされていて、それを空白にしようとしたときにのみ壊れます。
私はそれが検証とは関係がないことを理解しました。日付が解析されて日時に戻されていたときでした。
これはこれを行うための最もエレガントな方法ではないかもしれませんが、機能します。誰かがより良い方法を知っているなら、私に知らせてください。
私は今このコードを持っています。
public static void FormatDate(MaskedTextBox c) {
c.DataBindings[0].Format += new ConvertEventHandler(Date_Format);
c.DataBindings[0].Parse += new ConvertEventHandler(Date_Parse);
}
private static void Date_Format(object sender, ConvertEventArgs e) {
if (e.Value == null)
e.Value = "";
else
e.Value = ((DateTime)e.Value).ToString("MM/dd/yyyy");
}
static void Date_Parse(object sender, ConvertEventArgs e) {
if (e.Value.ToString() == " / /")
e.Value = null;
}
これをmaskedtextbox
fordatetime
タイプで使用します
this.txtDateBrth.DataBindings.Add("Text", bsAgent, "DateBrth", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");
日付値が必要な場合はnull
、クラス宣言で null 許容の datetime 型を使用します。
private DateTime? _DateBrth;
public DateTime? DateBrth
{
get { return _DateBrth; }
set { _DateBrth = value; }
}
これを試してみると、最終的にこれに対するより簡単な解決策が見つかりました。
ステップ1:
Form.Designer.csで、マスクされたテキストボックス(私のものは「mTFecha」と呼ばれます)をバインドしている行を検索します。すなわち:
// mTFecha
//
this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true);
ステップ2:
マイナーハックを適用します。
this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, " / /"));
あなたは完了です!