В С# WinForm ListBox, как очистить выбор нескольких элементов с нажатой клавишей?

Я пытаюсь очистить выбор всех элементов в WinFom ListBox при нажатии клавиши escape.

Я создал обработчик события KeyPress, чтобы поймать событие. Он работает, когда выбран только один элемент, но когда выбрано несколько элементов, событие никогда не срабатывает. Любая идея о том, что происходит?

Заранее спасибо.

Здесь я прикрепил свой обработчик событий:

private void EscapeKeyPressed(object sender, KeyPressEventArgs e)
    {
        try
        {
            if (e.KeyChar == (char)Keys.Escape)
            {
                switch (sender.GetType().GetProperty("Name").GetValue(sender, null).ToString())
                {
                    case "LineLB":
                        LineLB.ClearSelected();
                        break;
                    case "ApplicationLB":
                        ApplicationLB.ClearSelected();
                        break;
                    default:
                        break;
                }
            }
        }
        catch(Exception ex) { MessageBox.Show(ex.Message); }

--20150526--

Спасибо всем вам, ребята, за ваши комментарии и предложения. Как некоторые из вас упоминали ранее, это была проблема с фокусом. Я добавляю строку кода в обработчик события SelectedIndexChange, и вот сравнение.

До

private void LineLB_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (LineLB.SelectedItems.Count > 1)
                ClearControlsFromPanel(PanelUser);
            else{
                   ...

После

    private void LineLB_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (LineLB.SelectedItems.Count > 1){
                ClearControlsFromPanel(PanelLine);
                LineLB.Focus();
            }
            else{
                   ...

person Felipe Navarro    schedule 26.05.2015    source источник
comment
Я создал образец программы WinForm с событием нажатия клавиши, прикрепленным к самому списку. Мой пример работает просто отлично... Согласно документации, ClearSelected() должен очищать все выбранные элементы (здесь .NET 4.5 VS 2013). Возможно, какой-то другой обработчик крадет ваш обработчик EscapeKeyPressed.   -  person Maghoumi    schedule 26.05.2015
comment
Я также попробовал ваше решение и отлично работает. У меня есть подозрение, что у вас проблема с фокусом, а не с нажатием клавиши, когда вы нажимаете клавишу ESC, имеет ли фокус ваше поле со списком? К какому списку подключено ваше событие нажатия клавиши?   -  person Ruskin    schedule 26.05.2015
comment
Привет Раскин, спасибо за ваши комментарии. Вы были совершенно правы, я терял фокус на событии SelectedIndexChanged, когда обнаруживал более одного выбранного элемента. Я решил это, просто добавив ListBox.Focus();   -  person Felipe Navarro    schedule 26.05.2015


Ответы (1)


это связано с тем, что вы фокусируетесь на одном ListBox при работе с другим ListBox, вам нужно работать с событием KeyPress формы вместо ListBox.

person Muhammad Faisal    schedule 26.05.2015