1

フォームのテキスト ボックスを介してユーザーから文字列値を受け取ります。次に、データベース テーブルに対するクエリで使用されます。これは文字列ですが、入力する文字は整数のみにする必要があります。

INT32TryParse関数など、さまざまな方法を試しました。ただし、入力が「受け入れ可能」になるまで、IF ELSEまたは何かを実行できないようにしようとすると、問題が発生します。TRY CATCH

整数のみをテキスト ボックスに入力できるようにする、または整数以外のものを特定して実行を失敗させる最も簡単な方法は何ですか?

4

5 に答える 5

3

はい、使用できますint.TryParse

string selectSql = "SELECT * FROM SomeTable WHERE ID = @ID";

int id;
if (!int.TryParse(txtID.Text, out id))
    MessageBox.Show("ID must be an integer.");
else
{
    using (var myCon = new SqlConnection(connectionString))
    using (var selectCommand = new SqlCommand(selectSql, myCon))
    {
        selectCommand.Parameters.AddWithValue("@ID", id);
        myCon.Open();
        using (var reader = selectCommand.ExecuteReader())
        {
            // do something with the records
        }
    }
}

NumericUpDownコントロールを使用することもできます。

于 2013-03-28T15:11:15.963 に答える
1

TextBox の代わりに NumericUpDown コントロールを使用する

于 2013-03-28T15:09:09.763 に答える
1

私はそれを行う3つの可能な方法を知っています:

  1. テキストボックスの TextChanged イベントで無効な文字を削除します。

    private void txb_TextChanged(object sender, EventArgs e)
    {
    int selStart = txb.SelectionStart;
    
    string result = txb.Text;
    
    // remove all that aren't digits
    result = Regex.Replace(result, @"[^0-9]", string.Empty);
    
    txb.Text = result;
    
    // move cursor
    if (selStart > txb.Text.Length)
        txb.Select(txb.Text.Length, 0);
    else txb.Select(selStart, 0);
    }
    
  2. TextBox コントロールを拡張し、ユーザーが押すすべての無効なキーを無視する

    public class IntegerTextBox : TextBox
    {
    private Keys[] int_allowed = {
             Keys.D1,
             Keys.D2,
             Keys.D3,
             Keys.D4,
             Keys.D5,
             Keys.D6,
             Keys.D7,
             Keys.D8,
             Keys.D9,
             Keys.D0,
             Keys.NumPad0,
             Keys.NumPad1,
             Keys.NumPad2,
             Keys.NumPad3,
             Keys.NumPad4,
             Keys.NumPad5,
             Keys.NumPad6,
             Keys.NumPad7,
             Keys.NumPad8,
             Keys.NumPad9,
             Keys.Back,
             Keys.Delete,
             Keys.Tab,
             Keys.Enter,
             Keys.Up,
             Keys.Down,
             Keys.Left,
             Keys.Right
        };
     protected override void OnKeyDown(KeyEventArgs e)
            {
                base.OnKeyDown(e);
                if (e.Modifiers == Keys.Control) return;
    
                if (!int_allowed.Contains(e.KeyCode))
                {
                    e.SuppressKeyPress = true;
                }
            }
        }
    }
    
  3. KeyDown および/または KeyPress イベントを処理し、許可されていないものが押された場合はキャンセルします

于 2013-03-28T15:28:02.980 に答える
0

TextBox から継承する独自のクラスを作成できます。

    public class NumericTextBox : TextBox
{
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        base.OnKeyPress(e);

        var key = e.KeyChar + "";
        if (key == "\b")
            return;
        double number;
        string newText = Text.Remove(SelectionStart, SelectionLength).Insert(SelectionStart, key);
        if (newText.Length == 1 && key == "-")
            return;
        if (!double.TryParse(newText, NumberStyles.Float, CultureInfo.InvariantCulture, out number))
        {
            e.Handled = true;
        }
    }

    public double Value
    {
        get { return Text.Length == 0 ? 0 : double.Parse(Text, CultureInfo.InvariantCulture); }
    }
}
于 2013-03-28T15:13:38.923 に答える
0

別の方法として、textboxes の TextChanged イベントを使用できます。

値が変更されるたびにテキストを int.TryParse します。機能しない場合は、テキスト ボックスをクリアします (または、最後に機能した値を保持し、失敗した場合に元に戻します)。

于 2013-03-28T15:18:31.203 に答える