我发现这个自定义类允许NumericUpDown
接收空值。我在一个可以为空的编辑表单中使用它,或者可以使用来自数据库的数据填充来自需要可为空的值的数据。Windows窗体 - 自定义NumericUpDown为空
这是当前的代码:
public partial class NullableNumericUpDown : NumericUpDown
{
public NullableNumericUpDown()
{
InitializeComponent();
}
public NullableNumericUpDown(IContainer container)
{
container.Add(this);
InitializeComponent();
}
private int? _value;
[Bindable(true)]
public new int? Value
{
get
{
return _value;
}
set
{
_value = value;
if (value != null)
{
base.Value = (int)value;
Text = Value.ToString();
}
else
{
Text = "";
}
}
}
private void NullableNumericUpDown_ValueChanged(object sender, EventArgs e)
{
_value = (int)base.Value;
}
void NullableNumericUpDown_TextChanged(object sender, System.EventArgs e)
{
if (Text == "")
{
_value = null;
}
}
}
我是相当新的C#,所以我不能说我完全理解的代码,但不过,我的问题是,当我用数据填充表单从数据库和NullableNumericUpDown
有什么价值,比如说 - 3
。当我将此值更改为5
时,我从表格中提交的数据中获得的最终结果是53
。另外,如果我删除3
,然后按递增箭头我得到4
。似乎最初的数据是保存在这个控制的整个生命周期中,我试图设置0
在我认为它可能会帮助的一些目前的地方,但它不会,除了我需要摆脱这一事实初始值,如果控制的值被改变,实际上它不够,只是使其成为0
因为如果我有空的控制,这一定是好的,并将其记录为null
而不是0
。
只是要完成这里是我如何设置数据为NullableNumericUpDown
控制:
numUpDnAreas.Value = entity.AreasCnt;
这发生在我的form_load
事件。当我点击Save
按钮,我收集的数据与此:
entity.AreasCnt = numUpDnAreas.Value;
可以将此代码进行重构,以满足我的需求,或者我应该离开它,只是使用类似MaskedTextBox
或其他?
谢谢,我是C#初学者,需要一个快速的解决方案,这似乎不存在,所以我要修改一个'MaskedTextBox'。无论如何,稍后在我的编程生涯中,我可能会回到你的答案。 – Leron 2013-03-14 11:10:23
看看你是否可以使用工具包中的UpDownControl,测试它是否适用于你,几乎不会花费几分钟的时间,你总是可以回到你的MaskedTextBox – 2013-03-14 12:29:30