当我在 TextBox 中键入时,第一个字符转到文本的末尾

First Character goes to the end of the text when I type in TextBox

我有一个 TextBox 名为 PercentageText。我使用 TextChanged 事件将“%”附加到 TextBox 中键入的文本。 TextChanged事件中的代码如下

if (skipTextChange)
                skipTextChange = false;
            else
            {
                skipTextChange = true;
                if (PercentageText.Text =="")
                {
                    PercentageText.Text = " ";
                }

                if (PercentageText.TextLength == 1)
                {
                    if (PercentageText.Text != "%")
                    {
                        PercentageText.Text =""+ PercentageText.Text.Trim() + "%";
                    }
                }
            }

并在 TextChanged 事件块之外初始化 SkipTextChange=false;。我的问题是当我输入任何内容时,第一个字符一直到文本的末尾,例如,如果我输入 152,它显示 521,当我使用键盘清除 TextBox 时(返回 Space 键),然后再次输入它就可以正常工作了。

与其解决所有这些麻烦,我建议您只需在文本框的右侧添加一个标签,然后将 % 作为标签的文本。

但是,如果您真的想使用 TextChanged 路径,那么您需要测试您的输入是否以 % 字符结尾,如果不是则添加它。您还需要设置下一个字符的输入位置。

if (skipTextChange)
    skipTextChange = false;
else
{
    skipTextChange = true;
    if (PercentageText.Text == "")
    {
        PercentageText.Text = " ";
    }
    if (!PercentageText.Text.EndsWith("%"))
    {
        PercentageText.Text = "" + PercentageText.Text.Trim() + "%";
        PercentageText.SelectionStart = PercentageText.TextLength - 1;
    }
}

考虑使用这种方法进行广泛测试。 Copy/Paste,应验证删除和退格行为以及插入多个空格或用户直接键入 % 字符的情况。当然,如果这个文本框应该只包含数字,则需要更复杂的验证码。如果这是上下文,那么我建议使用 NUmericUpDown 控件及其右侧的标签技巧。