我发现这个自定义类允许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
在一些当前的地方设置我认为它可能会有所帮助,但它不会而且除了我需要摆脱这个初始的事实value 如果控件的值发生了变化,实际上仅仅做到这一点是不够的0
因为如果我有空控件,这必须没问题并将其记录null
为0
。
在这里要完整的是我如何为NullableNumericUpDown
控件设置数据:
numUpDnAreas.Value = entity.AreasCnt;
这发生在我的form_load
活动中。当我点击Save
按钮时,我用这个收集数据:
entity.AreasCnt = numUpDnAreas.Value;
是否可以重构此代码以满足我的需求,或者我应该保留它并只使用类似MaskedTextBox
或其他的东西?