Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
bd_13
104 / 89 / 39
Регистрация: 05.11.2015
Сообщений: 428
#1

Запрет контекстного меню (ContextMenuStrip1) в пустом месте listbox

13.03.2017, 12:18. Просмотров 303. Ответов 5
Метки нет (Все метки)

Сделал контекстное меню по Listbox. вот код:
vb.net
1
2
3
4
5
6
7
8
9
10
Private Sub ListBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            ContextMenuStrip1.Show(Form1.MousePosition)
        End If
 
        If e.Button = Windows.Forms.MouseButtons.Right Then
            Dim lb As ListBox = DirectCast(sender, ListBox)
            lb.SelectedIndex = lb.IndexFromPoint(e.Location)
        End If
    End Sub
в принципе все работает, но есть одно но. контекстное меню выпадает по всему listbox. Как сделать так что бы контекстное меню выпадало только при выборе записи?
заранее спасибо за помощь!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2017, 12:18
Ответы с готовыми решениями:

Позиционирование контекстного меню NotifyIcon
При клике по NotifyIcon появляется контекстное меню левый низ которого...

Изменение текста подпункта контекстного меню
Доброго времени суток, уважаемые форумчане! Столкнулся с необходимостью...

Добавление обработчика события контекстного меню
Как добавить обработчик события (Click) создаваемому без использования...

Получить событие строки контекстного меню
Всем знатокам доброго времени суток! Динамически создаю контекстное меню....

Уменьшение ширины пунктов контекстного меню (ToolStripMenuItem)
всем приветы. Добавлено через 11 минут всем приветы. текст пунктов и...

5
Sklifosofsky
762 / 696 / 174
Регистрация: 29.09.2015
Сообщений: 843
13.03.2017, 20:41 #2
vb.net
1
2
3
4
5
6
7
8
9
    Private Sub ListBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            Dim lb As ListBox = DirectCast(sender, ListBox)
            lb.SelectedIndex = lb.IndexFromPoint(e.Location)
            If lb.SelectedIndex <> -1 Then
                ContextMenuStrip1.Show(Form1.MousePosition)
            End If
        End If
    End Sub
1
bd_13
104 / 89 / 39
Регистрация: 05.11.2015
Сообщений: 428
20.03.2017, 09:36  [ТС] #3
Sklifosofsky, а как сделать то же самое, только уже для Listview?
0
Sklifosofsky
762 / 696 / 174
Регистрация: 29.09.2015
Сообщений: 843
20.03.2017, 20:35 #4
Мона

Без привязки к ListView

1
vb.net
1
2
3
4
5
6
7
8
9
10
    Private _isRight As Boolean = False
    Public Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
        _isRight = (e.Button = Windows.Forms.MouseButtons.Right)
    End Sub
 
    Public Sub ListView1_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged
        If e.IsSelected And _isRight Then
            ContextMenuStrip1.Show(Form1.MousePosition)
        End If
    End Sub
2

vb.net
1
2
3
4
5
    Public Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right AndAlso Not CType(sender, ListView).GetItemAt(e.X, e.Y) Is Nothing Then
            ContextMenuStrip1.Show(Form1.MousePosition)
        End If
    End Sub
С привязкой к ListView
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub ContextMenuStrip1_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        Dim focused As Boolean = False
        For Each i As ListViewItem In CType(CType(sender, ContextMenuStrip).SourceControl, ListView).SelectedItems
            If i.Focused Then
                focused = True
                Exit For
            End If
        Next
        If Not focused Then
            e.Cancel = True
        End If
    End Sub

С привязкой к ListView

vb.net
1
2
3
4
5
6
7
    Private Sub ContextMenuStrip1_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        Dim l As ListView = CType(CType(sender, ContextMenuStrip).SourceControl, ListView)
 
        If l.SelectedItems.Count < 1 OrElse Not l.SelectedItems(0).Focused Then ' элемент под фокусом всегда первый
            e.Cancel = True
        End If
    End Sub
2
bd_13
104 / 89 / 39
Регистрация: 05.11.2015
Сообщений: 428
21.03.2017, 09:21  [ТС] #5
Sklifosofsky, а как сделать что бы вне записей только контекстное меню выпадало? только по пустому месту в listview?
Спасибо вам огромное за помощь!
0
Sklifosofsky
762 / 696 / 174
Регистрация: 29.09.2015
Сообщений: 843
21.03.2017, 18:32 #6
bd_13, достаточно слегка переделать код

Без привязки
vb.net
1
2
3
4
5
    Public Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right And CType(sender, ListView).GetItemAt(e.X, e.Y) Is Nothing Then
            ContextMenuStrip1.Show(Form1.MousePosition)
        End If
    End Sub

С привязкой
vb.net
1
2
3
4
5
6
7
8
    Private Sub ContextMenuStrip1_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
 
        Dim l As ListView = CType(CType(sender, ContextMenuStrip).SourceControl, ListView)
 
        If l.SelectedItems.Count = 1 AndAlso l.SelectedItems(0).Focused Then
            e.Cancel = True
        End If
    End Sub
1
21.03.2017, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2017, 18:32

Реализация меню контекстного поиска в WEB-приложении.
В windows приложениях легко реализовать меню контекстного поиска. Т.е. ...

Программно добавить/удалить пункт контекстного меню
Как програмно добавить/удалить пункту контекстного меню ?

Вызов контекстного меню левой кнопкой мыши
Собсно, как видно из названия темы, вопрос у меня простой как двери. Почему я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru