Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
bd_13
83 / 68 / 26
Регистрация: 05.11.2015
Сообщений: 405
#1

Запрет контекстного меню (ContextMenuStrip1) в пустом месте listbox - Visual Basic .NET

13.03.2017, 12:18. Просмотров 253. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запрет контекстного меню (ContextMenuStrip1) в пустом месте listbox (Visual Basic .NET):

Позиционирование контекстного меню NotifyIcon - Visual Basic .NET
При клике по NotifyIcon появляется контекстное меню левый низ которого находится в точке, где располагался на этот момент курсор мыши....

.NET 4.x Получить событие строки контекстного меню - Visual Basic .NET
Всем знатокам доброго времени суток! Динамически создаю контекстное меню. Заранее не знаю какие будут строки, например такие Пупик ...

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

Добавление обработчика события контекстного меню - Visual Basic .NET
Как добавить обработчик события (Click) создаваемому без использования дизайнера элементу контекстного меню? Public Class Form1 ...

Вызов контекстного меню левой кнопкой мыши - Visual Basic .NET
Собсно, как видно из названия темы, вопрос у меня простой как двери. Почему я не могу вызвать на экран ContextMenuStrip просто жмакнув...

Реализация меню контекстного поиска в WEB-приложении. - Visual Basic .NET
В windows приложениях легко реализовать меню контекстного поиска. Т.е. пользователь жмет клавишу "Б" в textbox, в listbox высвечивается...

5
Sklifosofsky
671 / 607 / 148
Регистрация: 29.09.2015
Сообщений: 718
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
83 / 68 / 26
Регистрация: 05.11.2015
Сообщений: 405
20.03.2017, 09:36  [ТС] #3
Sklifosofsky, а как сделать то же самое, только уже для Listview?
0
Sklifosofsky
671 / 607 / 148
Регистрация: 29.09.2015
Сообщений: 718
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
83 / 68 / 26
Регистрация: 05.11.2015
Сообщений: 405
21.03.2017, 09:21  [ТС] #5
Sklifosofsky, а как сделать что бы вне записей только контекстное меню выпадало? только по пустому месту в listview?
Спасибо вам огромное за помощь!
0
Sklifosofsky
671 / 607 / 148
Регистрация: 29.09.2015
Сообщений: 718
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
Привет! Вот еще темы с ответами:

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

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

Как подавить вызов контекстного меню формы Main - Visual Basic .NET
Помогите, пожалуйста, решить проблему. Для главного окна (Main) определено контекстное меню (CMS). Поверх окна Main вызывается...

Как удалить программно пункты контекстного меню ContextMenuStrip - Visual Basic .NET
Помогите решить проблемку: Существует контекстное меню, пункты меню добавляются при загрузке проекта. Имена пунктам меню присваиваются из...


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

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

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