2010-08-23 2 views
3

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

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

ответ

14

Существует альтернативное событие: 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 Информация о версии:

  • .NET Framework - Spported в: 4, 3.5, 3,0, 2,0
  • .NET Framework Client Profile - Поддерживается в версиях: 4, 3.5 SP1
+0

да это я то, что я искал, спасибо :) – Karim

1

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

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

тогда я заставил пункт, чтобы отменить после того, как окно CheckState изменилось:

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

 Смежные вопросы

  • Нет связанных вопросов^_^