0
        string temp = textBox1.Text;
        char[] array1 = temp.ToCharArray();
        string temp2 = "" + array1[0];
        string temp3 = "" + array1[1];
        string temp4 = "" + array1[2];
        textBox2.Text = temp2;
        textBox3.Text = temp3;
        textBox4.Text = temp4;

ユーザーが textBox1 に 3 文字未満の文字を入力したときに発生する IndexOutOfRange エラーを防ぐにはどうすればよいですか?

4

4 に答える 4

10

ユーザーが textBox1 に 3 文字未満しか入力しない場合、IndexOutOfRange エラーを防ぐにはどうすればよいですか?

を使用して確認してくださいtemp.Length

if (temp.Length > 0)
{
    ...
}

... またはswitch/を使用しますcase

また、配列はまったく必要ありません。ToString各文字を呼び出すか、次を使用しSubstringます。

string temp = textBox1.Text;
switch (temp.Length)
{
    case 0:
        textBox2.Text = "";
        textBox3.Text = "";
        textBox4.Text = "";
        break;
    case 1:
        // Via the indexer...
        textBox2.Text = temp[0].ToString();
        textBox3.Text = "";
        textBox4.Text = "";
        break;
    case 2:
        // Via Substring
        textBox2.Text = temp.Substring(0, 1);
        textBox3.Text = temp.Substring(1, 1);
        textBox4.Text = "";
        break;
    default:
        textBox2.Text = temp.Substring(0, 1);
        textBox3.Text = temp.Substring(1, 1);
        textBox4.Text = temp.Substring(2, 1);
        break;
}

もう 1 つのオプション (さらに優れた方法) は、条件演算子を使用することです。

string temp = textBox1.Text;
textBox2.Text = temp.Length < 1 ? "" : temp.Substring(0, 1);
textBox3.Text = temp.Length < 2 ? "" : temp.Substring(1, 1);
textBox4.Text = temp.Length < 3 ? "" : temp.Substring(2, 1);
于 2013-07-18T16:17:29.813 に答える
0

それを行う別の方法は、次を使用することですElementAtOrDefault

    string[] temp = textBox1.Text.Select(c => c.ToString());
    string temp2 = "" + temp.ElementAtOrDefault(0);
    string temp3 = "" + temp.ElementAtOrDefault(1);
    string temp4 = "" + temp.ElementAtOrDefault(2);
    textBox2.Text = temp2;
    textBox3.Text = temp3;
    textBox3.Text = temp4;
于 2013-07-18T16:20:01.113 に答える