0

文字列が8より大きい場合、最後の文字を削除する必要があります

これはどのように可能ですか?

private void textBoxNewPassword_TextChanged(object sender, EventArgs e)
{
    if (textBoxNewPassword.TextLength == 9)
        textBoxNewPassword.Text = textBoxNewPassword.Text.Remove((textBoxNewPassword.Text.Length - 1), 1);
}

コードは何もしないようです。

4

5 に答える 5

2

8文字の部分文字列を取ります。

textBoxNewPassword.Text = textBoxNewPassword.Text.Substring(0, 8);

さらに良いことMaxLengthに、あなたのプロパティTextBoxを8に設定します。

于 2012-11-05T17:35:20.837 に答える
2

String.Substringメソッド(Int32、Int32)を使用します。ここで、最初のパラメーターは開始インデックスで、2番目のパラメーターは文字数です。また、長さが8より大きいかどうかを確認する必要がある場合は、次のようにします。

if (textBoxNewPassword.Text.Length > 8)
    textBoxNewPassword.Text = textBoxNewPassword.Text.SubString(0,8);
于 2012-11-05T17:35:32.240 に答える
2

の使用の精神はRemove()不適切ではありませんが、 の最初の引数Remove(int, int)ゼロベースであることを忘れています。したがって、ifステートメントで長さが 9 であることを確立すると (すべてではありませんが、ほとんどの場合はTextBoxBase.TextLength単純にオーバーレイされます)、位置 8TextBoxBase.String.Lengthにあるときに文字列の最後の文字をアドレス指定していることになります。Remove代わりは:

textBoxNewPassword.Text = textBoxNewPassword.Text.Remove((textBoxNewPassword.Text.Length - 2), 1);

Substringしかし、このソリューションがよりクリーンで脆くないという点には、誰もが同意できると思います。そもそも何もしていないように見えた理由を理解できるように、これについてのみ言及します。

于 2012-11-05T17:56:16.763 に答える
1

あなたの質問が求めるように正確に行うには

    private void textBoxNewPassword_TextChanged(object sender, EventArgs e)
    {
        if (textBoxNewPassword.Text.Length > 8)
        {
            textBoxNewPassword.Text = textBoxNewPassword.Text.Substring(0, textBoxNewPassword.Text.Length - 1);
        }
    }

最後の文字が 8 文字を超える場合にのみ、最後の文字を削除したいとおっしゃいました。

于 2012-11-05T17:39:54.587 に答える
0

これは可能な一般的な解決策です。

static void Main(string[] args)
    {
        string text = "The max length is seven".RemoveChars(7);

    }

    public static string RemoveChars(this string text, int length)
    {
        if (!String.IsNullOrEmpty(text) && text.Length > length)
            text = text.Remove(length, text.Length - length);
        return text;
    }

この助けを願っています。

于 2012-11-05T17:44:40.107 に答える