4

プログラミングは初めてで、よくわかりませんが、電卓を作成しています。数値と小数のみを受け入れるテキストボックスを使用したいのですが、ユーザーがクリップボードからテキストを貼り付けると、テキストボックスは次のようなリテラル文字を削除しますMSカルク。

各部分を説明する時間をとってください。そうすれば、私はそれを学び、書き、何を検索すればよいか教えてくれます。

ありがとう

編集:より具体的にします:

C#で数値テキストボックスを作成するにはどうすればよいですか? マスクされたテキストボックスを使用しましたが、小数は使用できません。

OnKeyPress メソッドのオーバーロードについて読んだことがあるので、間違った文字は修正されますが、それを行う方法はわかりません。

4

13 に答える 13

13

数値のみにするテキスト ボックスのイベント ハンドラーを追加し、次のコードを追加します。

private void textBoxNumbersOnly_KeyPress(object sender, KeyPressEventArgs e)
{
   if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
   {
      e.Handled = false;
   }
   else
   {
      e.Handled = true;
   }
}

これにより、0 から 9 までの数字と、バックスペース (便利な IMHO) が可能になります。「.」を介して許可します 小数をサポートする場合の文字

于 2009-05-04T07:20:30.637 に答える
7

よく見ると、Windows Calculatorでは、数値はテキストボックスではなくラベルに表示されます(フォーカスは表示されません)。ウィンドウはキーボードイベントを受け取ります。

したがって、フォームのKeyPressedイベントとKeyDownイベントを確認してください。

于 2009-02-03T19:47:38.247 に答える
4

最も簡単な方法:)

テキストボックスのキープレスイベントで


if ((e.KeyChar <= 57 && e.KeyChar >= 48) || e.KeyChar == 13 || e.KeyChar == 8)
{
}
else
{
     e.Handled = true;
}

于 2009-02-03T20:29:02.547 に答える
2

フレームワークには、数値入力用に特別に作成されたコントロールがあります: NumericUpDown コントロールです。また、10 進数値も管理します。

于 2009-02-03T22:34:33.527 に答える
1
        if ("1234567890".IndexOf(e.KeyChar.ToString()) > 0)
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
于 2010-08-31T13:54:16.167 に答える
0

10 進数の入力には便利ですが、他のテキストを (右クリックして貼り付ける) といくつかのバグがあります。:D

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        string original = (sender as TextBox).Text;
        if (!char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }
        if (e.KeyChar == '.')
        {
            if (original.Contains('.'))
                e.Handled = true;
            else if (!(original.Contains('.')))
                e.Handled = false;

        }
        else if (char.IsDigit(e.KeyChar)||e.KeyChar=='\b')
        {
            e.Handled = false;
        }

    }
于 2012-11-04T21:47:20.850 に答える
0

here vb.netでこれを行う方法

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Dim reg As New System.Text.RegularExpressions.Regex("[^0-9_ ]")
    TextBox1.Text = reg.Replace(TextBox1.Text, "")
End Sub

特定のニーズに合わせて正規表現を修正するだけです

于 2009-02-03T19:36:51.937 に答える
0

MaskedTextBox を調査します。

質問は、すべてを説明するために少し広いです。多くのコミュニティに「各部分の説明」を求めているため、詳細が必要な場合は質問に焦点を当てるようにしてください。いくつかの具体的な質問をすると (「説明する時間をください...」を除外して)、より適切な回答が得られます。

于 2009-02-03T19:37:53.633 に答える
0

私の知る限り、.NET フレームワーク (少なくとも 2.0) にはこれを行うためのネイティブなものはありません。オプションは次のとおりです。

  1. テキスト ボックス コントロールから継承し、数値入力のみを許可するカスタム コントロールを作成します。これには、コントロールを再利用できるという利点があります。
  2. KeyPress イベントを処理し、charCode をチェックして、数値キーストロークのみを許可します。これは簡単ですが、再利用性ははるかに低くなります。
于 2009-02-03T19:39:58.840 に答える
0

おそらく正規表現を使用して、数値以外を除外します。

擬似コード:

for (each item in the input string) {
   if (!match(some regular expression, item)) {
        toss it out
   } else {
        add item to text box or whatever you were going to do with it
   }

}
于 2009-02-03T19:40:22.630 に答える
0

単純なテキスト ボックスまたはラベルを計算機の表示として使用し、値 (文字列?) が常に数値であることを確認することができます。たとえば、double を保持して、表示したいときに文字列に変換できます。

于 2009-02-03T20:08:27.800 に答える
-1

初心者なので、優れたサードパーティのツールキットに投資したほうがよいかもしれません。たとえば、Telerik の Radcontrols には、探しているものを実現する数値テキスト ボックスがあります。

于 2009-02-03T20:19:24.470 に答える