NumericUpDown
null許容値を受け取ることができるこのカスタムクラスを見つけました。私はそれを編集フォームで使用します。編集フォームは空にすることも、null許容値の必要性が生じるデータベースからのデータを入力することもできます。
これは現在のコードです:
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
または他のようなものを使用する必要がありますか?