Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET 2019如何在动态ToolstripmenuItem上填充标记属性_Vb.net_Tags - Fatal编程技术网

VB.NET 2019如何在动态ToolstripmenuItem上填充标记属性

VB.NET 2019如何在动态ToolstripmenuItem上填充标记属性,vb.net,tags,Vb.net,Tags,我正在努力在我创建的动态创建的子菜单上填充标记属性。我有一个文本文件,其中包含许多电台名称,例如BBC1、BBC2、BBC3,以及所述电台的相关流地址。我能够将名称拉入并将其应用于子菜单。它们看起来很好。我可以单击子菜单,sender()变量将正确确认电台名称。我的问题是,我无法获取每个子菜单/电台的Tag属性来存储流地址。代码获取电台标题清除代码并将其插入RadioStreamToolStripMenuItem.DropDownItems.Add(电台名称)中,一切正常。然后,代码获取流地址并

我正在努力在我创建的动态创建的子菜单上填充标记属性。我有一个文本文件,其中包含许多电台名称,例如BBC1、BBC2、BBC3,以及所述电台的相关流地址。我能够将名称拉入并将其应用于子菜单。它们看起来很好。我可以单击子菜单,sender()变量将正确确认电台名称。我的问题是,我无法获取每个子菜单/电台的Tag属性来存储流地址。代码获取电台标题清除代码并将其插入RadioStreamToolStripMenuItem.DropDownItems.Add(电台名称)中,一切正常。然后,代码获取流地址并将其插入此处RadioStreamToolStripMenuItem.Tag.ToString()。我可以看出这是错误的,但是我如何确保正确的流进入正确的radio-Tag属性呢。我对这个很陌生,所以请温柔一点,这只是一个小爱好

'======================================================================  
'Aquires Radio name and creates a dropdown sub menu within RadioStreams  
'======================================================================   

Do While (Not line Is Nothing)
    If line.StartsWith("#") Then
        station_name = Replace(line, "#", "")
        Dim x = RadioStreamsToolStripMenuItem.DropDownItems.Add(station_name)
        AddHandler x.Click, AddressOf ToolMenuItem_Click
        '===================================================
        'Aquires Radio Stream to add to the Tag property for each new station                                   
        '===================================================
    ElseIf line.StartsWith("@") Then
        Dim station_stream As String = Replace(line, "@", "")
        'The following just checks if the data has gone into the correct place
        For Each Myitem As ToolStripItem In RadioStreamsToolStripMenuItem.DropDownItems
            If Myitem.Text = station_name Then
                MsgBox("MyItems  " & Myitem.ToString())
                Me.Tag = station_stream
            End If
        Next


您可以使用字典将站点存储为流地址。查字典很快

我从您的代码中假设您的文本文件如下所示

#BBC1
@BBC1streamAddress
#BBC2
@BBC2streamAddress
#BBC3
@BBC3streamAddress

我在文件的各行中循环,将修剪过的键和值分配给字典。然后循环浏览字典,填写菜单。当用户单击一个菜单项时,我们将获得该项的文本并在字典中搜索正确的流地址

Private RadioDictionary As New Dictionary(Of String, String)

Private Sub OPCode()
    Dim lines = File.ReadAllLines("Radio.txt")

    For i = 0 To lines.Length - 1 Step 2
        RadioDictionary.Add(lines(i).Trim("#"c), lines(i + 1).Trim("@"c))
    Next
    For Each item In RadioDictionary
        Dim x = RadioStreamsToolStripMenuItem.DropDownItems.Add(item.Key)
        AddHandler x.Click, AddressOf ToolMenuItem_Click
    Next
End Sub

Private Sub ToolMenuItem_Click(sender As Object, e As EventArgs) Handles ToolMenuItem.Click
    Dim station = DirectCast(sender, ToolStripDropDownItem).Text
    Dim stream = RadioDictionary(station)
End Sub

您正在访问此处的
Click
事件:
AddHandler x.Click,AddressOf ToolMenuItem\u Click
。为什么访问
标记
属性会有任何不同?请原谅,我真的不知道,但你是说我可以使用ToolMenuItem\u标记吗?当我创建一个新的子菜单时,标签项是否存在,还是应该创建它?对不起,听起来这么傻。你为什么要设置
Me.Tag=station\u stream
?你知道这里什么是
Me
(不是ToolStripMenuItem)。如果ElseIf,则不需要这些
,创建一个包含两个字符串(已清理)的类对象作为属性值,并使用它们设置项文本和标记。你可能会发现你甚至不需要标签。非常感谢你们的评论。我尝试了你的代码Mary,不幸的是我得到了以下错误。。。基于某种原因基于此代码。RadioDictionary.Add(行(i).Trim(#”c),行(i+1).Trim(@“c))System.IndexOutOfRangeException HResult=0x80131508消息=索引超出了数组的边界。Source=迷你\媒体\流媒体!非常抱歉<代码>对于i=0到行。长度步骤2
对于i=0到行应为
。长度-1步骤2
@JohnHenderson如果我的答案提供了解决方案,请单击答案左侧的复选标记接受我的答案。