Member 13130599 Ответов: 1

Можете ли вы создать операторы switch для изменения текстовых полей?


Привет
Я пытаюсь создать программу, которая при нажатии кнопки " ОК " переместится в следующее текстовое поле. Я думал,что смогу сделать это с помощью операторов if и первого оператора if, однако при добавлении второго и третьего операторов if решение развалилось.

Что мне нужно, так это способ эмулировать "break;" в операторе switch или, еще лучше, преобразовать мои " if " в "switches". Я попытался сделать это, но я не знаю, какую переменную я должен поместить в скобку переключателя, так как "Textbox" является типом и поэтому недопустим в требуемом мне контексте.

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

Спасибо.

Что я уже пробовал:

текущий код:
private void btn_OK_Click(object sender, EventArgs e)
        {
            if (txt_Hours.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = true;
                txt_Seconds.Enabled = false;
            } 
                                   
            if (txt_Minutes.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = false;
                txt_Seconds.Enabled = true;
            }

            if (txt_Seconds.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = false;
                txt_Seconds.Enabled = false;
            }


попытка кодирования:

private void btn_OK_Click(object sender, EventArgs e)
        {
            switch (TextBox)
            {
                case txt_Hours.Enabled == true:
                    txt_Hours.Enabled = false;
                    txt_Minutes.Enabled = true;
                    txt_Seconds.Enabled = false;
                    break;

                case txt_Minutes.Enabled = true:
                    txt_Hours.Enabled = false;
                    txt_Minutes.Enabled = false;
                    txt_Seconds.Enabled = true;
                    break;

                case txt_Seconds.Enabled = true:
                    txt_Hours.Enabled = false;
                    txt_Minutes.Enabled = false;
                    txt_Seconds.Enabled = false;
                    break;
            } 

Richard MacCutchan

Почему вы возитесь с несколькими текстовыми полями? Используйте одну коробку в течение всего времени, или еще лучше используйте стандартный элемент управления: Как: отображение времени с помощью элемента управления DateTimePicker[^].

1 Ответов

Рейтинг:
5

OriginalGriff

Начните думать о том, что вы хотите сделать. Это не сработает:

if (txt_Hours.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = true;
                txt_Seconds.Enabled = false;
            } 
            if (txt_Minutes.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = false;
                txt_Seconds.Enabled = true;
            }
            if (txt_Seconds.Enabled == true)
            {
                txt_Hours.Enabled = false;
                txt_Minutes.Enabled = false;
                txt_Seconds.Enabled = false;
            }
Потому что если первый случай проходит, он устанавливает условие, которое делает второй случай проходным (включив txt_Minutes), которое устанавливает условие, которое делает третий случай проходным - так что независимо от того, в каком состоянии он начинается, он всегда заканчивается одинаково: все отключено.

Вы можете сделать это с помощью else условия:
if (txt_Hours.Enabled == true)
{
    txt_Hours.Enabled = false;
    txt_Minutes.Enabled = true;
    txt_Seconds.Enabled = false;
}
else if (txt_Minutes.Enabled == true)
{
    txt_Hours.Enabled = false;
    txt_Minutes.Enabled = false;
    txt_Seconds.Enabled = true;
}
else if (txt_Seconds.Enabled == true)
{
    txt_Hours.Enabled = false;
    txt_Minutes.Enabled = false;
    txt_Seconds.Enabled = false;
}
else
{
    // Dunno what you want to do here...
}

Но вы не можете сделать это легко с помощью switch потому что выражения switch работают только со значениями sbyte, byte, short, ushort, int, uint, long, ulong, char, string или enum, а операторы case работают только с постоянными значениями.