Как запустить одно и то же событие двумя разными способами, основываясь на двух критериях? (С #) - PullRequest
0 голосов
/ 31 марта 2011

Возможно, я неправильно понял слова, чтобы задать этот вопрос. Это сложное предложение, и я хочу срочно найти решение: - (

Я хочу вызвать textBox1_KeyDown двумя различными способами, но нажатием одной и той же клавиши на основе некоторых критериев. Код ниже даст больше ясности.

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (textBox1.Text == "")
        {
            if (e.KeyCode == Keys.Enter)
            {
                textBox1.Text = "x";
            } 
        }


        if (textBox1.Text != "")
        {
            if (e.KeyCode == Keys.Enter)
            {
                 textBox1.Text = "y";
            }
        }
    }

То, что я пытаюсь сделать, это когда я нажимаю кнопку Enter на textBox1, я хочу, чтобы он отображал «х», если в нем нет текста. Если в нем есть какой-то текст, то я хочу, чтобы в текстовом поле отображалось «y» после нажатия Enter. Когда я делаю так, как я описал выше, обе процедуры происходят в одном случае. То есть, когда я нажимаю Enter, когда textBox1 пусто, отображается «y» (что должно быть «x»). Это означает, что сначала отображается «x», а затем, так как текстовое поле содержит количество, текст становится «y», как вызвано моим кодом. Как разделить две функции ?? Как я хочу, чтобы текстовое поле показывало только «x», когда оно пустое, и я нажимаю Enter, или оно должно отображать только «y», когда оно не пустое, и я нажимаю Enter.

Я, должно быть, упускаю что-то глупое .. Спасибо .. Пожалуйста, дай мне код. Я с трудом разбираюсь в технических терминах ..

Ответы [ 5 ]

3 голосов
/ 31 марта 2011

Это потому, что оба оператора if выполняются. Первый оператор if выполняется и делает текст в текстовом поле не пустым. Это также вызывает следующий оператор if. Простое выполнение этого должно исправить это:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (textBox1.Text == "")
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox1.Text = "x";
        } 
    }


    else if (textBox1.Text != "")
    {
        if (e.KeyCode == Keys.Enter)
        {
             textBox1.Text = "y";
        }
    }
}

обратите внимание на добавление выражения "else" во второй оператор if.

1 голос
/ 31 марта 2011

Может быть, я что-то упускаю, но почему бы просто не добавить еще:

private void textBox1_KeyDown(object sender, KeyEventArgs e)    
{
    if (textBox1.Text == "")         
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox1.Text = "x";
        }
    }

    else if (textBox1.Text != "")
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox1.Text = "y";
        }
    }
} 
1 голос
/ 31 марта 2011

Исходя из того, что вы там написали, вы можете просто перевернуть порядок своих операторов if или сделать второй блок else или else if.

1 голос
/ 31 марта 2011

Вы ищете что-то вроде этого, поэтому я считаю:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    //determine if text is empty or otherwise equal to 'x'...
    if (textBox1.Text == string.Empty || textBox1.Text != "x")
    {
        //confirmed, set to 'x'...
        textBox1.Text = "x";
    }
    else //and a catch-all for y
    {
        //text wasn't empty or 'x', set to 'y'...
        textBox1.Text = "y";
    }
}

Вы также можете добиться этого кратким способом, используя троичный оператор :

//get a copy of the text
var value = textBox1.Text;
//set textbox value to 'x' if not empty or equal to 'x', otherwise 'y'
textBox1.Text = value == string.Empty || value != "x" ? "x" : "y";
1 голос
/ 31 марта 2011

Ну, для начала вы могли бы поместить return; в свои глубоко вложенные if операторы, чтобы следующий if не выполнялся.

Другая вещь, которую вы можете сделать, это изменить порядок ваших условий, поэтому вы проверяете на if (textBox1.Text != "") вверху вашего обработчика, а не внизу.

И, наконец, вы можете просто использовать else между двумя условными выражениями.

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