使用数据绑定写入Null / Nothing值

时间:2010-05-19 08:38:14

标签: .net data-binding

我扩展了MaskedTextBox组件以添加一些功能。扩展MaskedTextBox的text属性绑定到DateTime?属性,绑定格式设置为“HH:mm:ss”的时间格式(即24小时时间)。这样,这个蒙版文本框将捕获显示一段时间。

我添加的额外功能是使组件只读,除非双击组件或按下回车按钮(控件的背面颜色有助于通知用户组件是否被锁定/只读)。当按下回车按钮时,我也暂停绑定,以便更新绑定数据,用户输入不会丢失。然后,当用户再次按下回车键时,信息将被写回该值并重新开始数据绑定。

这一切都可以正常使用,并且会按照预期编写和显示值。

但是,我还想将nullnothing值写入DateTime?属性,如果用户没有输入任何文本(或无效的文字,但让我们坚持不按Enter键以提交新值。

与<{i>与MaskedTextBox中的其他有效条目不同,如果我在执行时输入了 no text

        Me.DataBindings("Text").WriteValue()

(当'锁定'MaskedTextBox时)然后分支到绑定属性Get方法,因为我进入调试器中的每行代码(而不是带有其他有效条目的Set方法)

如果DateTime?中没有输入文字“”,如何将此null / nothing /“”值写入MaskedTextBox属性?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

为了操作绑定控件中显示的值并保存在绑定属性中,您需要处理绑定的Format和Parse事件。请参阅下面的简单示例代码:

maskedTextBox1.DataBindings.Add("Text", bindobj, "Time");
maskedTextBox1.DataBindings[0].Parse += new ConvertEventHandler(Form1_Parse);
maskedTextBox1.DataBindings[0].Format += new ConvertEventHandler(Form1_Format);

void Form1_Format(object sender, ConvertEventArgs e)
{
    if (e.Value == null)
        e.Value = "Null";
}
private void Form1_Parse(object sender, ConvertEventArgs e)
{
    DateTime d;

    if (DateTime.TryParse(e.Value.ToString(), out d))
        e.Value = d;
    else
        e.Value = null;
 }
private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
        maskedTextBox1.DataBindings[0].WriteValue();
}