3

System.Windows.Forms.NumericUpDownコントロールを備えたフォームがあります。

範囲が0〜100で、現在の値(スピナーを介して到達)が100であるとします。許容範囲外の数値(たとえば567)を入力できますが、フォームで[OK]をクリックすると値をリセットすると、範囲外の値が100にサイレントに設定され、フォームが閉じます。

顧客は、番号が範囲外であるという明示的なメッセージを望んでいます。そこで、NumericUpDown.Textフォームcloseでプロパティを確認することを検討しましたが、そのプロパティは「567」ではなく「100」を返します。

コントロールに表示されるテキストが「567」であるという事実をどこで(またはどのように)「キャッチ」できますか?

4

2 に答える 2

7

この質問の回答を使用して、TextBox内部への参照を取得し、NumericUpDownそのValidatingイベントを処理することで、無効な値を取得できます。ハンドラーでは、TextBox.Textプロパティにテスト対象の無効な値が含まれます。.NET2.0Winformsで動作します。

于 2011-12-16T22:37:44.193 に答える
2

これを試すことができます。唯一のことは、値が100にリセットされますが、範囲外の値がユーザーに通知されることです。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            int val = Convert.ToInt32(((UpDownBase)numericUpDown1).Text);

            if (val > 100)
            {
                MessageBox.Show("The value " + ((UpDownBase)numericUpDown1).Text + 
                " is out of range", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                e.Cancel = true;
            }
        }
于 2011-12-16T22:44:24.780 に答える