我扩展了MaskedTextBox
组件以添加一些功能。扩展MaskedTextBox
的text属性绑定到DateTime?
属性,绑定格式设置为“HH:mm:ss”的时间格式(即24小时时间)。这样,这个蒙版文本框将捕获显示一段时间。
我添加的额外功能是使组件只读,除非双击组件或按下回车按钮(控件的背面颜色有助于通知用户组件是否被锁定/只读)。当按下回车按钮时,我也暂停绑定,以便更新绑定数据,用户输入不会丢失。然后,当用户再次按下回车键时,信息将被写回该值并重新开始数据绑定。
这一切都可以正常使用,并且会按照预期编写和显示值。
但是,我还想将null
或nothing
值写入DateTime?
属性,如果用户没有输入任何文本(或无效的文字,但让我们坚持不按Enter键以提交新值。
与<{i>与MaskedTextBox
中的其他有效条目不同,如果我在执行时输入了 no text :
Me.DataBindings("Text").WriteValue()
(当'锁定'MaskedTextBox
时)然后分支到绑定属性Get方法,因为我进入调试器中的每行代码(而不是带有其他有效条目的Set方法)
如果DateTime?
中没有输入文字“”,如何将此null / nothing /“”值写入MaskedTextBox
属性?
感谢您的帮助!
答案 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();
}