Отключение проблемы кнопок на C#

Хорошо, таким образом, я пытаюсь переместить объекты от одного поля списка до другого при помощи нескольких кнопок т.е.

У меня есть 2 кнопки cmdRight и cmdRight2, которые оба отключены на загрузке формы

Если пользователь выбирает единственный объект на первом поле списка, cmdRIght кнопка включает, но cmdRight2 все еще отключен, если пользователь выбирает несколько объектов на первом поле списка, cmdRight2 кнопка включает, но cmdRight отключен.

У меня есть кнопки перемещения для работы, но проблема, которую я имею, после перемещает несколько объектов с cmdRight2 кнопкой, которую cmdRight кнопка включает (который она не была должна, она должна только включить после выбора единственного объекта в поле списка). Я попробовал многочисленный, если операторы и т.д. и все же это все еще происходит.

Я плохо знаком с C#, таким образом, любая справка ценилась бы.

Спасибо

        private void lbList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.lbList1.SelectedItems != null)
            {
                cmdRight.Enabled = true; //enable cmdRight
                cmdClear.Enabled = true; //enable cmdClear
                if (this.lbList1.SelectedItems.Count > 1)//if multiple items selected
                {
                    cmdRight.Enabled = false;
                    cmdRight2.Enabled = true; //enable cmdRight2              
                }
            }
        }


    private void cmdRight2_Click(object sender, EventArgs e)
    {
        foreach (int i in lbList1.SelectedIndices)
        {
            lbList2.Items.Add(lbList1.Items[i].ToString());
        }
        while (lbList1.SelectedItems.Count > 0)
        {
            lbList1.Items.Remove(lbList1.SelectedItems[0]);
        }
        cmdRight2.Enabled = false;

    }

    private void cmdRight_Click(object sender, EventArgs e)
    {
        lbList2.Items.Add(lbList1.SelectedItem); //Add selected item from list1 to list2
        lbList1.Items.Remove(lbList1.SelectedItem);//remove the selected item in list1

        cmdRight.Enabled = false; //disable cmdRight
    }
5
задан KP. 16 February 2010 в 13:49
поделиться

3 ответа

Я думаю, вам нужно

if (this.lbList1.SelectedItems.Count == 1)
{
}
else if(this.lbList1.SelectedItems.Count > 1)
{
}
else
{
}

вместо

if (this.lbList1.SelectedItems != null)

. Тогда вы можете поместить все это в метод под названием «EnableButtons», как упоминалось в другом месте

1
ответ дан 15 December 2019 в 00:59
поделиться

Как насчет создания одного метода EnableButtons, который включает/выключает кнопки в соответствии с заданными критериями, например "включить cmdRight2 только если.... true".

Затем вызывайте этот метод всякий раз, когда некоторые критерии могут измениться. Преимущество этого метода перед тем, как вы делаете это сейчас, заключается в том, что критерии в методе являются "абсолютными" (когда кнопки либо включаются, либо выключаются одним махом), а не "относительными" (включение кнопки, когда пользователь делает то или иное действие).

Вы также можете вызвать этот метод из события Application.Idle вместо того, чтобы вызывать его в ответ на какое-то действие пользователя.

EDIT

Объявите следующий метод:

private void EnableButtons()
{
    controlX.Enabled = (<condition...>);
    controlY.Enabled = (<condition...>);
}

Вы можете либо вызвать этот метод из тех мест в коде, где что-то должно измениться во включенном состоянии кнопок, либо сделать следующее в конструкторе формы:

public Form1()
{
    // Other code...

    Application.Idle += new <The respective event handler>;
}

Затем объявите метод с соответствующей сигнатурой для события и вызовите там EnableButtons. Этот метод будет вызываться в ситуациях, когда ваше приложение "простаивает" (ожидая действий пользователя).

3
ответ дан 15 December 2019 в 00:59
поделиться

Проблема в том, что вы удаляете элементы по одному, поэтому, когда остается только один элемент, у вас, по сути, выбран один элемент, поэтому ваша программа включает cmdRight. Самый простой способ обойти это - иметь

cmdRight2.Enabled = false;
cmdRight.Enabled = false;

в конце метода cmdRight2_Click.

0
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: