Очистка TextBox оставляет невидимого символа - PullRequest
0 голосов
/ 12 июня 2018

Я разрабатываю текстовую RPG.Если вы введете что-то в текстовое поле (tUser), будет вызван метод Input() и обработан ваш запрос.Если это соответствует определенному условию, произойдет что-то еще, например, выход из игры.

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 очищается.
Если вы попытаетесь выполнить ту же или любую другую команду (снова), ничего не произойдет, пока вы не удалите «невидимый» символ в TextBox.
У меня естьтакже пробовал tUser.ClearUndo().

Что это за персонаж и как я могу его избежать?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Ну, я думаю, что это как-то связано с тем, что ваши ключевые события все еще устанавливают значение текстового поля или что-то подобное после того, как текстовое поле было очищено.В любом случае, быстрое решение состоит в том, чтобы просто использовать tUser.trimStart ('') или что-то подобное.

0 голосов
/ 14 июня 2018

По какой-то причине в текстовом поле сохраняется возврат каретки.Добавление e.Handled = true к методу, который вызывает Input(), решает эту проблему.

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

e.Handled предотвращает обработку сообщения ввода после завершения работы этого обработчика ( source ).

0 голосов
/ 12 июня 2018

Почему бы просто не установить текст в пустую строку вместо использования clear?

tUser.Text = string.Empty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...