Итак, благодаря многочисленным ответам на stackoverflow мы все знаем, как открыть контекстное меню, когда элемент в списке был правильно выбран. т.е .:Открытие контекстного меню в списке только в том случае, если не было нажата NO item
private void listviewItems_MouseClick(object sender, MouseEventArgs e) {
ListView tmp_SenderListView = sender as ListView;
if (e.Button == MouseButtons.Right) {
ListViewItem tmp_SelectedItem = tmp_SenderListView.GetItemAt(e.X, e.Y);
if (tmp_SelectedItem != null) {
tmp_SelectedItem.Selected = true;
contextMenuStripItem.Show(tmp_SenderListView, e.Location);
}
}
}
Моя цель состоит в том, чтобы открыть другой (другую) ContextMenu, когда пользователь щелкает внутри ListView, но не нажимает на элемент, а скорее пустое пространство. (Предпочтительно не срабатывает при нажатии на заголовок столбца)
Мои первые мысли были просто проверить, если выше tmp_SelectedItem был нулевой и, следовательно, нет пункта. когда я все же вложил корпус else и переключил его:
private void listviewItems_MouseClick(object sender, MouseEventArgs e) {
ListView tmp_SenderListView = sender as ListView;
if (e.Button == MouseButtons.Right) {
ListViewItem tmp_SelectedItem = tmp_SenderListView.GetItemAt(e.X, e.Y);
if (tmp_SelectedItem == null) {
contextMenuStripNoItem.Show(tmp_SenderListView, e.Location);
}
else {
tmp_SelectedItem.Selected = true;
contextMenuStripItem.Show(tmp_SenderListView, e.Location);
}
}
}
Это не сработало, просто ничего не открылось. я попробовал еще раз, на этот раз открывая contextMenuStripNoItem прежде, чем я тестировал если деталь была нажата, если бы это было так, то contextMenuStripNoItem будет закрыт, а contextMenuStripItem откроет. Это тоже не сработало.
Я попытался с созданием contextMenuStripNoItem основной ContextMenuStrip в ListView, однако тогда он только не открыл contextMenuStripNoItem независимо от того, где и на то, что я нажал внутри ListView. Для добавления я попытался закрыть, что назначил contextMenuStrip, когда элемент был нажат и вместо этого открывает другой. Не работает.
Я действительно не понимаю, почему это не сработало с первыми двумя подходами, поэтому после некоторых исследований, чтобы подтвердить отсутствие учебника для этого или уже существующего вопроса на форуме (по крайней мере, насколько я искал и понял), я решил обратиться к stackoverflow.
Заранее спасибо :)
Итак, я пробовал ваше решение сейчас, и он работает так же, как и другой, но почему он не работает, если я помещаю if внутри события MouseClick? – RememberOfLife
@RememberOfLife Как я уже говорил, «Mouse_Click» работает только тогда, когда пользователь попадает на метку элемента внутри ListView. – Berkay
Таким образом, очевидно, что он мгновенно открывается, если я нажимаю область без элементов и открывается только при выпуске, если я нажимаю элемент. Для меня не проблема. Спасибо :) – RememberOfLife