0

この Web サイトで別のヘルプを見つけましたが、まだ文字列を int に変換できないようです。私は多くの異なる方法を試しました。ここにそれらの2つがあります。button_click では、テキスト ボックスを読み取って int に変換し、それらに対して標準ロジックを実行できるようにする必要があります。(a > b 関数)。最初のセクションの下には、テキスト ボックスへの入力時に数字の使用を強制するために使用しているものがあります。

    private void write_button_Click(object sender, EventArgs e)
       {
        int mat_od1 = int.Parse(matod_box.Text); //Input string in wrong format.
        int mat_id1 = int.Parse(matid_box.Text);
        int fod1 = int.Parse(fod_box.Text);
        int fid1 = int.Parse(fid_box.Text);
        int hp1 = int.Parse(hp_box.Text);

        //This next section is just to show something else I've tried.

        decimal mat_od = Convert.ToDecimal(matod_box.Text); //Same error.
        decimal mat_id = Convert.ToDecimal(matid_box.Text);
        decimal fod = Convert.ToDecimal(fod_box.Text);
        decimal fid = Convert.ToDecimal(fid_box.Text);
        decimal hp = Convert.ToDecimal(hp_box.Text);
        decimal pass_od = mat_od;

    }

       private void fod_box_TextChanged(object sender, EventArgs e)
    {
        try
        {
            int numinput = int.Parse(fod_box.Text);
            if (numinput < 1 || numinput > 500)
            {
                MessageBox.Show("You must enter a number between 0 and 500.");
            }
        }
        catch (FormatException)
        {

            MessageBox.Show("You need to enter a number.");
            fod_box.Clear();

        }

どんな助けでも大歓迎です。

4

4 に答える 4

4

int.Parse()この方法を使用する代わりにint.TryParse(string,out int)
、出力をチェックして、文字列が正しく解析されたかどうかを判断できます。

int i;string s="";
if(int.TryParse(s,out i))
{
 //use i
}
else
{
//show error
}
于 2012-05-25T14:55:42.153 に答える
2

次のサンプルのように、int.parse 変換が機能するはずです。

  string s = "111";
  int i;
  if (int.TryParse(s, out i))
  {
     Console.Write(i);
  }
  else
  {
      Console.Write("conversion failed");
  }

int に実際に法的な入力を提供したと確信していますか? いずれにせよ、私のサンプルで行ったように、TryParse を使用する必要があります。フレームワークによって提供されるブール値メソッドを使用できる場所では、try..catch を使用する必要はありません。同じ結果が得られます。

于 2012-05-25T14:55:46.217 に答える
1

すべては、テキストボックスに何を入れることができるかによって異なります。

空白を含む整数に変換できる文字列でない場合は、次のようになります。

int value;
if (int.TryParse(SomeString, out value)
{
   // it is an int
}
else
{
  // it's not an int, so do nothing raise a message or some such.
}
于 2012-05-25T14:57:18.617 に答える
0

Int32.TryParse他の人が指摘したように、ボタン Click イベント ハンドラーで使用することに加えて、TextBoxChangedイベント ハンドラーで何をしているのかに注意する必要があります。ここのコードには欠陥があります:

private void fod_box_TextChanged(object sender, EventArgs e) 
{ 
    try 
    { 
        int numinput = int.Parse(fod_box.Text); 
        ...
    } 
    catch (FormatException) 
    { 
        MessageBox.Show("You need to enter a number.");  
        fod_box.Clear(); 
    } 

foo_box.Clear() を呼び出すと、テキストボックスからテキストがクリアされ、TextChanged ハンドラーが再度実行されるように呼び出されます (TextBox が既に空でない場合)。そのため、数値以外の値を入力すると、メッセージ ボックスが 2 回表示されます。1 回目は数値以外の値を解析しようとするとき、2 回目は呼び出しの結果として空の文字列を解析しようとするときです。クリア()。

一般に、Changed イベント ハンドラーで検証を行うことは避けます。

于 2012-05-25T15:05:52.513 に答える