я хочу обнаружить элемент двойным щелчком в элементе управления winforms listbox.[как обрабатывать клик по пустой области?] - PullRequest
3 голосов
/ 23 августа 2010

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

Обновление:
Обратите внимание, что этот вопрос не так прост, как кажется на первый взгляд.
также обратите внимание, что ответ Тимви не является правильным, потому что часть [if (ListBox1.SelectedIndex == -1)] не выполняется, если выбран элемент, и я щелкнул в пустом месте я не знаю, кто проголосовал за него, но его ответ неверен.
у меня уже была эта часть кода написана
если есть функция, которая может преобразовывать координаты мыши в элемент списка, тогда проблема будет исправлена ​​

Ответы [ 2 ]

14 голосов
/ 23 августа 2010

Существует альтернативное событие: MouseDoubleClick, которое предоставляет MouseEventArgs, чтобы вы могли получить координаты щелчка.Затем вы можете позвонить GetItemBounds(), чтобы получить прямоугольник, содержащий выбранный элемент, и проверить, находятся ли координаты мыши в этом прямоугольнике:

    private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if(listBox1.SelectedIndex != -1)
        {
            var rect = listBox1.GetItemRectangle(listBox1.SelectedIndex);
            if(rect.Contains(e.Location))
            {
                // process item data here
            }
        }
    }

MouseDoubleClick Информация о версии:

  • .NETFramework - поддерживается в: 4, 3,5, 3,0, 2,0
  • .NET Client Profile - поддерживается в: 4, 3,5 SP1
1 голос
/ 17 марта 2014

Вот то, что я использовал для одного MouseClick, может быть адаптировано.

Сначала я установил для свойств CheckListBox.CheckOnClick значение true: clb.CheckOnClick = true;

затем я заставил элемент отменить выбор после изменения контрольного состояния поля:

void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (clb.Items.Count > 0) { clb.SetSelected(0, false); }
    }
...