清除 TextBox 会留下一个不可见的字符

Clearing a TextBox leaves an invisible character

我正在开发基于文本的角色扮演游戏。如果您在文本框中键入内容 (tUser),方法 Input() 将被调用并处理您的查询。如果它符合某个条件,则为其他条件,例如。 G。退出游戏,会发生。

public void Input()
{
    if (tUser.Text.ToLower() == "ende" || listening)
    {
        if (tUser.Text.ToLower() == "ende")
        {
            if (MessageBox.Show(playername + 
                ", wollt Ihr wirklich das Spiel ohne Speichern verlassen?", "Beenden", 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Application.Exit();
            }
        }
        else
        {
            input = tUser.Text;

            if (accept == 1 && !input.Any(char.IsDigit))
            {
                tRPG.AppendText("\nBitte gebt nur eine Zahl ein!");
            }
            else
            {     
                listening = false;
            }
        }        
    }

    // Reset
    input = "";
    tUser.Clear();
}

如果您按 Enter 键,您的查询将被提交。该过程完成后,将清除 TextBox。
如果您(再次)尝试相同或任何其他命令,则不会发生任何事情,直到您删除文本框中的 "invisible" 字符。
我也试过 tUser.ClearUndo().

这个字符是什么,我该如何避免它?

为什么不直接将文本设置为空字符串而不是使用 clear?

tUser.Text = string.Empty;

嗯,我认为这与您的按键事件在清除文本框后仍然设置文本框或类似内容的值有关。无论如何,一个快速的解决方法是只使用 tUser.trimStart(' ') 或类似的东西。

出于某种原因,文本框保留了一个回车 return。在调用 Input() 的方法中添加 e.Handled = true 解决了这个问题。

private void tUser_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        e.Handled = true;
        Input();
    }
}

e.Handled 阻止在此处理程序完成后处理输入消息 (source)。