Как найти определенную позицию выбранного элемента в списке, делая кнопки включенными в С#?

У меня есть список с такими элементами, как A B C D E.
У меня также есть две кнопки Вверх и Вниз.
Я уже сделал их свойства ложными в окне свойств (F4).

Когда пользователь выбирает B или все элементы ниже, моя кнопка «Вверх» должна активироваться. Это должно быть отключено для элемента A

Точно так же моя кнопка «Вниз» должна быть включена, когда пользователь выбирает D или все элементы над ним. Это должно быть отключено для E.

Не могли бы вы предоставить мне правильную часть кода, которую нужно написать здесь.

Спасибо....


person crazy_itgal    schedule 01.06.2009    source источник


Ответы (3)


Я делаю нечто подобное в своем приложении. Он также обрабатывает выбор нескольких элементов, а также проверяет, являются ли несколько выбранных элементов непрерывными или нет.

Вот код:

private bool SelectionIsContiguous(ListBox lb)
{
    for (int i = 0; i < lb.SelectedIndices.Count - 1; i++)
        if (lb.SelectedIndices[i] < lb.SelectedIndices[i + 1] - 1)
            return false;

    return true;
}

private void SetMoveButtonStates()
{
    if (this.listBox.SelectedIndices.Count > 0)
    {
        if (this.listBox.SelectedIndices.Count > 1 && !SelectionIsContiguous(this.listBox))
        {
            this.btnMoveUp.Enabled = false;
            this.btnMoveDown.Enabled = false;
            return;
        }

        int firstSelectedIndex = this.listBox.SelectedIndices[0];
        this.btnMoveUp.Enabled = firstSelectedIndex == 0 ? false : true;

        int lastIndex = this.listBox.Items.Count - 1;
        int lastSelectedIndex = this.listBox.SelectedIndices[this.listBox.SelectedIndices.Count - 1];
        this.btnMoveDown.Enabled = lastSelectedIndex == lastIndex ? false : true;
    }
}
person SO User    schedule 01.06.2009
comment
Привет, Рашми, спасибо за ответ, еще одну вещь, которую я хотел спросить. Я хочу выбрать файл из моего списка. Например, A, указанный выше. den. Я хочу включить свою кнопку для этого. Я написал это, если (m_lbOPFfiles.SelectedIndex == 0) { m_BtnValidateInput.Enabled = true; } теперь при выборе A активируется только моя кнопка, тогда как я хочу, чтобы при выборе любого из файлов, таких как B C D E, она должна быть включена. Я написал вышеуказанную часть в SelectIndex Changed Clik Event. Можешь помочь, что не так?? - person crazy_itgal; 01.06.2009
comment
Если я правильно понимаю вашу проблему, то вам нужно сделать это: ..... if (m_lbOPFfiles.SelectedIndex ›= 0) { m_BtnValidateInput.Enabled = true; } .... надеюсь это поможет :) - person SO User; 01.06.2009

Обработайте событие SelectedIndexChanged ListBox. Если SelectedIndex больше 0, включите «переместить вверх». Если он меньше, чем count - 1, включить "переместиться вниз"

person Thomas Levesque    schedule 01.06.2009

Вот код, который я использую в listBox_SelectedIndexChanged:

this.moveUp.Enabled = this.listBox.SelectedIndex > 0;
this.moveDown.Enabled = this.listBox.SelectedIndex > -1 && listBox.SelectedIndex < listBox.Items.Count - 1;

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

person ChrisF    schedule 01.06.2009