Первый символ переходит в конец текста, когда я печатаю в TextBox - PullRequest
0 голосов
/ 25 января 2020

У меня есть 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() + "%";
                    }
                }
            }

и инициализирован SkipTextChange=false; вне блока событий TextChanged. Моя проблема заключается в том, что когда я что-либо печатаю, первый символ проходит до конца текста, например, если я набираю 152, он показывает 521 и когда я очистил TextBox с помощью клавиатуры (клавиша «Пробел») и введите опять работает идеально.

1 Ответ

0 голосов
/ 25 января 2020

Вместо того, чтобы идти ко всем этим неприятностям, я предлагаю вам просто добавить метку справа от текстового поля и поставить% в качестве текста метки.

Однако, если вы действительно хотите go для путь TextChanged, то вам нужно проверить, заканчивается ли ваш ввод% char, и добавить его, только если нет. Также вам нужно установить позицию, в которой должен быть напечатан следующий символ.

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, Delete и BackSpace должно быть проверено и вставка нескольких пробелов или в случае% char, набираемого непосредственно пользователем. Конечно, если предполагается, что это текстовое поле содержит только цифры, требуется более сложный проверочный код. Если это контекст, то я предлагаю использовать элемент управления NUmericUpDown и трюк с меткой справа.

...