1

ユーザーが最大数の文字をテキストボックスに入力できるようにする方法はありますか?ユーザーにマーク/グレードを入力して、0〜100しか入力できないようにします。以下に、キーストロークを監視し、数字のみを入力できるコードがありますが、ユーザーに入力のみを許可する方法を見つけたいと思います。最小値が0、最大値が100の数値を入力します。

private void TxtMark4_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar < '0' || e.KeyChar > '9' || e.KeyChar == ' ')
    {
        e.Handled = true;
    }
    else
    {
        e.Handled = false;
    }
}

または私は以下を使用することができます:

if (e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == ' ')
{
    e.Handled = false;
}
else
{
    MessageBox.Show("You Can Only Enter A Number!");
    e.Handled = true;
}

ただし、最大3文字しか入力できないようにする方法を見つけたいと思います。

4

3 に答える 3

5

次のように簡単だと思います:

textBox1.MaxLength = 3;

次に、Leave イベントで最大値を処理します。

    private void textBox1_Leave(object sender, EventArgs e)
    {
        string s = (sender as TextBox).Text;
        int i = Convert.ToInt16(s);

        if (i > 100)
        {
            MessageBox.Show("Number greater than 100");
            (sender as TextBox).Focus();
        }
    }

また

最小値と最大値を簡単に設定できるSystem.Windows.Forms.NumericUpDownを使用することもできます。

于 2013-02-07T01:32:38.917 に答える
0

考えられるすべてのユーザーエラーをキャッチして、このようにします。

テキストボックスの名前はTxtMark4だと思います。txtMark4.Content()または、TryParseを実行するif-testで、フレームワークのテキストボックスのコンテンツを読み取るために必要なものを記述します。

private void TxtMark4_KeyPress(object sender, KeyPressEventArgs e)
{
    int? tmp = null; //signed to allow it to be assigned the value of null
    if(int.TryParse(txtMark4.Text,out tmp)){
        if(tmp >=0 && tmp <= 100){
        //Here the number is between 0 and 100
        }
        else{//Number is below 0 or above 100
            if(tmp > 100){
                TxtMark4.Text = TxtMark4.Text.remove(2); //This will forcefully make it less or equal to 100
                DisplayLabel.text = "Numbers between 0-100 only";
            }
            else{
                TxtMark4.Text = ""; //and if its below 0 it will not be displayed
                DisplayLabel.text = "Numbers between 0-100 only";
            }
        }
    }
    else{//Not a number
        //Return some indicator to the user
        DisplayLabel.text = "numbers only";
    }
}
于 2013-02-07T05:06:03.170 に答える
0

このバージョンでは、解析に失敗した場合、textBox1.Text を空の文字列に設定します。

private void textBox1_TextChanged(object sender, EventArgs e) {
    int i;

    textBox1.Text=
        false==int.TryParse(textBox1.Text, out i)||0>i||i>100
            ?""
            :i.ToString();
}

部分的に正常に解析された数値を保持したい場合は、

String previousText="";

private void textBox1_TextChanged(object sender, EventArgs e) {
    var currentText=textBox1.Text;
    int i;

    textBox1.Text=
        int.TryParse(currentText, out i)
            ?0>i||i>99
                ?previousText
                :i.ToString()
            :""==currentText?currentText:previousText;

    previousText=textBox1.Text;
}
于 2013-02-07T01:42:33.037 に答える