型 | プロパティ | 内容 | 既定値 |
---|---|---|---|
string | Text | コントロールに表示されるテキスト | |
decimal | Value | コントロールに割り当てる値 | |
decimal | Maximum | 最大値 | 100 |
decimal | Minimum | 最小値 | 0 |
decimal | Increment | ボタンがクリックされたときに増減する量 | 1 |
bool | ThousandsSeparator | trueならば、桁区切りを表示する | false |
bool | Hexadecimal | trueならば、16進数形式で表示する | false |
int | DecimalPlaces | 小数部の桁数 | 0 |
bool | UserEdit | trueならば、ユーザーがTextプロパティを変更した | |
UpdateEditTexts()をオーバーライドすることで、書式など表示方法を変更できます。
protected override void UpdateEditText ();NumericUpDown.UpdateEditText Method (System.Windows.Forms) | Microsoft Learn
ユーザーにテキストを書き換えられた場合にも対応するには、ParseEditText()も実装します。このメソッドはオーバーライドできないためnewで隠蔽し、検証が必要なときにそれが呼ばれるようにValidateEditText()をオーバーライドします。また上下ボタンが操作されたときにもパースされるように、UpButton()とDownButton()もオーバーライドします。
class MyNumericUpDown : NumericUpDown { protected override void UpdateEditText() { // 現在の値がユーザーによって編集されていたら、処理前にパースする if (UserEdit) ParseEditText(); // Textプロパティを指定の書式に変更する Text = Value + "kb"; } protected new void ParseEditText() { Debug.Assert(UserEdit == true); try { // Textプロパティをパースし、Valueを更新する Value = Decimal.Parse(Text.Replace("kb", "")); } finally { UserEdit = false; } } protected override void ValidateEditText() { // オーバーライドした、このクラスのメソッドでパースする ParseEditText(); UpdateEditText(); } public override void UpButton() { if (UserEdit) ParseEditText(); base.UpButton(); } public override void DownButton() { if (UserEdit) ParseEditText(); base.DownButton(); } }c# - Having text inside NumericUpDown control, after the number - Stack Overflow winforms - How To Display "0000" instead "0" in NumericUpDown in C# - Stack Overflow NumericUpDown.cs
書式を変更することで表示される文字数が変化すると、AutoSizeでサイズが自動的に変更されるときにサイズが不一致となります。そのときはGetPreferredSize()もオーバーライドして、サイズを調整します。
型 | イベント | 発生タイミング |
---|---|---|
EventHandler | ValueChanged | Valueプロパティが変更されたとき |
EventHandler | TextChanged | Textプロパティが変更されたとき。ただしTextの検証に失敗したときは発生しない |
コードまたはユーザによってValueプロパティが変更されたときに発生します。上または下ボタンが押されたときは即座に、テキストが変更されたときはENTERが押されるかフォーカスが外れたときに発生します。一方でテキストが変更され上下のボタンが押されたときは、入力された値とボタンで増減した値で2度イベントが発生します。つまり"1"に変更されてから上ボタンが押されると、最初のイベント発生時点ではValueは1で、その直後にイベントが発生しIncrement分だけ加算され2となります。