Индекс пункта контекстного меню в VB.Net

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

DLF
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 10.09.2008 (Ср) 20:49

Индекс пункта контекстного меню в VB.Net

Сообщение DLF » 04.10.2008 (Сб) 15:32

Здравствуйте. Подскажите, можно ли стандартными средствами VB 2008 определить порядковый номер пункта контекстного меню (индекс)? Пункты меню заранее не определены и добавляются в пустое контекстное меню во время выполнения программы. Идея такая: при запуске программа определяет количество и имена CD или DVD приводов на компьютере. Информация заносится в контекстное меню PictureBox-a для последующего использования для закрытия-открытия выбранного или всех существующих приводов.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Индекс пункта контекстного меню в VB.Net

Сообщение Williams » 04.10.2008 (Сб) 15:46

Смотря что конкретно требуется, можно например так:

Код: Выделить всё
   For i = 0 To ContextMenuStrip1.Items.Count - 1

            Console.WriteLine(i.ToString & " " & ContextMenuStrip1.Items(i).Text)

        Next
И вы думаете, что вас оставят в живых после прочтения этого поста?

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Индекс пункта контекстного меню в VB.Net

Сообщение Joo » 04.10.2008 (Сб) 17:00

С динамическим меню я работаю обычно так:
Код: Выделить всё
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer = 0
        For i = 0 To 10
            With mnuContext.Items.Add("Пункт " & i.ToString)
                'В Tag я обычно записываю какие то ключивые данные
                'В данном примере это номер меню
                .Tag = i.ToString
                'Назначить картинку если нужно
                '.Image = My.Resources.SimpleImage
                AddHandler .Click, AddressOf Menu_Click
            End With
        Next
    End Sub

    Private Sub Menu_Click(ByVal sender As Object, ByVal e As EventArgs)
        'Занеся в Tag нужные данные, не приходится делать лишних движений по изыманию
        MsgBox("Кликнули по пункту " & sender.tag)
    End Sub
Последний раз редактировалось Joo 05.10.2008 (Вс) 11:11, всего редактировалось 1 раз.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Индекс пункта контекстного меню в VB.Net

Сообщение Nord777 » 04.10.2008 (Сб) 21:02

MenuItem можно получать напрямую со всеми вытекающими.
Код: Выделить всё
Public Class Form1
    Dim CMenu As New ContextMenu

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 5
            CMenu.MenuItems.Add("Item" & CStr(i), AddressOf MItem_Click)
        Next
        Me.ContextMenu = CMenu
    End Sub

    Sub MItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim MItem As MenuItem = DirectCast(sender, MenuItem)
        MsgBox(MItem.Text & " has index " & MItem.Index)
    End Sub

End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

DLF
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 10.09.2008 (Ср) 20:49

Re: Индекс пункта контекстного меню в VB.Net

Сообщение DLF » 04.10.2008 (Сб) 21:39

Всем спасибо. А можно всё это приобщить к следующему коду:

Код: Выделить всё
Public Class Form1
    Dim drive As New WMPLib.WindowsMediaPlayer
    Dim total, n As Integer

    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        total = 0
        n = 0
        total = drive.cdromCollection.count  ' <<< Количество приводов в системе
        If (total >= 1) Then
            For i = 0 To (total - 1)  ' <<< Добавление в контекстное меню
                ContextMenuStrip1.Items.Add(drive.cdromCollection.Item(i).driveSpecifier)
            Next
        End If
    End Sub

    Private Sub ContextMenuStrip1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ContextMenuStrip1.Click
        drive.cdromCollection.Item(0).eject()  ' <<< Открывается первый привод. Если Item(1), то второй
    End Sub

End Class

[Viper] :: Пользуемся тегами CODE!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Индекс пункта контекстного меню в VB.Net

Сообщение Nord777 » 04.10.2008 (Сб) 22:45

DLF,у меня сложилось такое впечатление, что анализ приведенных ответов на твой вопрос ты считаешь пустой тратой времени.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

DLF
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 10.09.2008 (Ср) 20:49

Re: Индекс пункта контекстного меню в VB.Net

Сообщение DLF » 04.10.2008 (Сб) 23:51

Nord777 писал(а):DLF,у меня сложилось такое впечатление, что анализ приведенных ответов на твой вопрос ты считаешь пустой тратой времени.


Прошу прощения, нашел ошибку. Все заработало, большое спасибо!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111

    TopList