.Focus () не работает в TextChangedEvent - PullRequest
0 голосов
/ 17 июня 2019

Я реализовал некоторый код в моей программе Windows Form C #, и проблема в том, что я хочу иметь следующий код в TextChangeEvent вместо события Validating, но методы .Focus() и .Select() требуют не работает

Какое решение для этого?

private void jTextBox5_TextChangeEvent(object sender, EventArgs e)
{
    if (jTextBox5.TextValue != "John")
    {
        jTextBox5.Focus();
    }
}

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Если вы пытаетесь добиться того, чтобы пользователь мог вводить только слово «Джон» в текстовое поле, и вы хотите проверять это при каждом нажатии клавиши, то вы можете сделать что-то вроде следующего кода, который проверяет текущий текст, по одному символу за раз, и сравнивает каждый символ с его аналогом в слове «Джон».

Если символ не совпадает, то мы устанавливаем текст только для подстроки символов, которые do соответствуют, чтобы они могли продолжать печатать:

private void jTextBox5_TextChanged(object sender, EventArgs e)
{
    var requiredText = "John";

    // Don't allow user to type (or paste) extra characters after correct word
    if (jTextBox5.Text.StartsWith(requiredText))
    {
        jTextBox5.Text = requiredText;
    }
    else
    {
        // Compare each character to our text, and trim the text to only the correct entries
        for (var i = 0; i < jTextBox5.TextLength; i++)
        {
            if (jTextBox5.Text[i] != requiredText[i])
            {
                jTextBox5.Text = jTextBox5.Text.Substring(0, i);
                break;
            }
        }
    }

    // Set the selection to the end of the text so they can keep typing
    jTextBox5.SelectionStart = jTextBox5.TextLength;
}
0 голосов
/ 17 июня 2019

Вы можете попробовать:

private void jTextBox5_TextChangeEvent(object sender, EventArgs e)
{
    if (jTextBox5.Text.ToUpper().Trim() != "JOHN")
    {
        ((Textbox)sender).Focus();
}
...