2

私のプログラムでは、ID、名前、名前、年俸などの従業員情報が入力されます。IDと給与ボックスをnumericupdownにしましたが、給与ボックスを数字のみを受け取るテキストボックスにしたいです。

ただし、numericupdownからテキストボックスに変更しようとすると、「「文字列」を「10進数」に暗黙的に変換できません」というエラーが発生します。最低給与などを見つける別のボタンもありますが、問題は何ですか?例外を作成しますテキストボックスに数字だけを使用させるようにしますが、それは私に許可しません:/

4

5 に答える 5

9

C# で数値テキスト ボックスを作成する方法
http://msdn.microsoft.com/en-us/library/ms229644(v=vs.90).aspx

最も単純な形式では:

protected override void OnKeyPress(KeyPressEventArgs e)
{
    if (!Char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

このコードは、数字以外のキーストロークを飲み込みます。MSDN リンクでは、小数点などを処理する方法について説明しています。

于 2012-04-18T15:10:24.707 に答える
4

ただし、numericupdownからテキストボックスに変更しようとすると、「「文字列」を「10進数」に暗黙的に変換できません」というエラーが発生します。

それは私にはキャストエラーのように見えます。

    employee.EmployeeId = (int)idNumericUpDown.Value;

代わりにこれを試してください:

    employee.EmployeeId = decimal.Parse(idNumericUpDown.Value);

またTryParse、よりクリーンなを調べてください。

于 2012-04-18T15:12:01.823 に答える
1

これは、テキストボックスに対して常に行うことです。

機能(すべての数値とバックスペースキーを使用できます):

private bool NumericOnly(char e)
        {
            return (e > (char)47 & e < (char)58) | e == (char)8;
        }

およびテキストボックスのonkeypressイベント:

if (!NumericOnly(e.KeyChar)) e.Handled = true;
于 2012-04-18T15:14:02.693 に答える
1

既存のテキストに追加されたときに正規表現に一致する文字のみを許可する「マスクされた」TextBox を作成できます。

それの短い:

まず、「編集マスク」である正規表現を作成します。^\d*$数値の場合は、 (任意の長さの整数) のように単純にすることも、^(\d{1,3}(,?\d\d\d)*(.\d{1,})?)?$(オプションのカンマとオプションの小数部分を含む数値) のように複雑にすることもできます。TextBox から派生する新しいコントロールのパブリック プロパティにこれを割り当てます。

次に、派生テキスト ボックスで OnKeyPress をオーバーライドして、次のようにします。

protected override void OnKeyPress(KeyPressEventArgs e)
{
    if (!Regex.Match(new StringBuilder(Text).Append(e.KeyChar).ToString(), MaskPattern))
    {
        e.Handled = true;
    }
    else
        base.OnKeyPress(e);
}

Robert Harveyの答えと同じように、このメソッドは、テキストボックスの現在のテキスト値に追加されたときに正規表現と一致しないキーを押すと「飲み込み」ます。この MaskedTextBox は、数値エントリだけでなく、英字のみの値、英数字のみ (記号や空白なし)、有効なローカル パスまたはネットワーク パス、IP アドレスなどを必要とするテキスト ボックスにも使用できます。

于 2012-04-18T15:51:36.000 に答える
1

これが私が見つけた1つのハックです。この方法で NumericUpDown コントロールの矢印を非表示にできます。

private void RemoveArrows(NumericUpDown numericUpDown)
{
    Control updown = numericUpDown.Controls[0];
    updown.Left += updown.Width;
    updown.Visible = false;
}

NumericUpDown コントロールに対してこのメ​​ソッドを呼び出すだけです (例: Form_Load イベント ハンドラー)。

private void Form2_Load(object sender, EventArgs e)
{
    RemoveArrows(idNumericUpDown);
    RemoveArrows(salaryNumericUpDown);
}

その他の方法 -数値テキスト ボックスを作成するか、解析と検証を使用します。

  1. ErrorProviderコンポーネントをツールボックスからフォームにドラッグします。
  2. CausesValidationテキストボックスのプロパティをに設定trueします (デフォルトでは true です)。
  3. NumericTextBox_Validating イベント ハンドラーを作成し、10 進数値を含むはずのすべてのテキスト ボックスにサブスクライブします。

テキストボックス内のテキストから 10 進数値を解析できなかった場合、エラー記号がテキストボックスの近くに表示され、「数値のみが許可されています」というメッセージが表示されます。

private void NumericTextBox_Validating(object sender, CancelEventArgs e)
{
    TextBox textBox = sender as TextBox;
    decimal value;
    if (Decimal.TryParse(textBox.Text, out value))
    {
        errorProvider1.SetError(textBox, "");
        return;
    }

    e.Cancel = true;
    errorProvider1.SetError(textBox, "Only numeric values allowed");
}

アドバイス- 数字の入力には NumericUpDown コントロールを使用してください。これは、ユーザーに「この矢印が見えますか?数字だけを入力するためにここにいます!」と表示されるためです。. また、 textbox は、受け入れるテキスト形式について何も述べていません。

于 2012-04-18T15:22:18.503 に答える