2

ゲッター/セッターで、入力を特定のデータ型、長さなどに制限する属性を使用したことを覚えています。IE[何かを属性付け]。

何か案は?

ありがとう

4

4 に答える 4

2

これを行う1つの方法(標準のテキストボックスを引き続き使用する場合)は、テキストボックスのテキスト変更イベントのイベントを作成することです。その中で、テキストを読んで、数字のみが含まれていることを確認します(およびダブルの場合のオプションの期間)

于 2012-06-29T17:25:32.937 に答える
2

ValidateInputで利用可能な属性を意味しましたSystem.Web.Mvcか?

MaskedTextBoxまた、 WinFormsを実行している場合は、おそらくを使用できます。

于 2012-06-29T17:36:41.490 に答える
1

Winforms?マスクされたテキストボックスコントロールの使用を検討しましたか?

http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx

于 2012-06-29T18:09:33.557 に答える
0

Winforms?NumericUpDownを使用してみませんか?

http://msdn.microsoft.com/en-us/library/57dy4d56.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.aspx

科学的記数法が必要な場合は、次のことができます。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    TextBox tBox = (TextBox)sender; 

    if (!((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
       || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
       || (e.KeyCode == Keys.Decimal && !(tBox.Text.Contains('.')) 
           && !(tBox.Text.Length == 0)
           && !((tBox.Text.Length == 1) 
              && (tBox.Text.Contains('-') || tBox.Text.Contains('+'))))
       || (e.KeyCode == Keys.OemPeriod && !(tBox.Text.Contains('.'))
           && !(tBox.Text.Length == 0)
           && !((tBox.Text.Length == 1) 
              && (tBox.Text.Contains('-') || tBox.Text.Contains('+'))))
       || (e.KeyCode == Keys.Subtract && ((tBox.Text.Length == 0) || 
           tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
       || (e.KeyCode == Keys.OemMinus && ((tBox.Text.Length == 0) || 
           tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
       || (e.KeyCode == Keys.Add && ((tBox.Text.Length == 0) ||  
           tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
       || (e.KeyCode == Keys.Oemplus && ((tBox.Text.Length == 0) || 
           tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
       || e.KeyCode == Keys.Delete
       || e.KeyCode == Keys.Back
       || e.KeyCode == Keys.Left
       || e.KeyCode == Keys.Right
       || (e.KeyCode == Keys.E) && !(tBox.Text.Contains('e')) && 
           (tBox.Text.Contains('.') && !tBox.Text.EndsWith("."))))
        {
            e.SuppressKeyPress = true;
        }
    }

これにより、数値と一致しないパターンの入力が拒否されます。eマイナス記号は、文字列の先頭(負の数を示すため)およびまたはの後Eに負の指数を示す場合にのみ許可されます。プラス記号はマイナスと同じ規則に従います。小数点は1つだけ許可され、少なくとも1つの数値の後に続く必要があります。またはは1つだけe許可Eされており、小数点の後に続き、小数点の後に少なくとも1つの数字が続く必要があります。

プログラム機能の他の側面に干渉する場合は、、、などのキーをHelp許可することもできます。Tab

これは不完全な数字を防ぐものではないことに注意してください(つまり1.37E-、または-13.が入力されるのを防ぐことはできないので、どのような場合でも文字列をチェックする必要があります。これにより、少なくともすぐに無効なエントリは拒否されます。

(同じハンドラーで、他のロジックの前に)次のようなことを行うことができます。

if (e.KeyCode == Keys.Enter)
{
    textBox1_Validating(sender, new CancelEventArgs());
    return;
}

上記は、Enterキーに入力(強制検証)の通常の「感触」を与えるだけです。テキストボックスを離れる(フォーカスが外れる)と、次のようなことを行う可能性のある検証もトリガーされます。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    TextBox tBox = (TextBox)sender; 
    double tstDbl;
    if (!double.TryParse(tBox.Text, out tstDbl)) 
    {
        //handle bad input
    }
    else
    {
        //double value OK
        doSomething(tstDbl);
    }            
}
于 2012-06-29T17:21:03.707 に答える