【问题标题】:How to Make Array Items As Separate Links in Link Label如何将数组项作为链接标签中的单独链接
【发布时间】:2014-09-19 17:57:22
【问题描述】:

我有一个LinkLabel,它被设置为接收一些在ComboBox 中进行选择而产生的URL。我想要完成的是让用户从我的组合中选择一个状态,然后能够单击出现在链接标签中的各个链接。

在数组中有我的链接,我得到的是数组将链接显示为“一个完整的”字符串,我希望它们分隔链接。这是我所拥有的:

Public arrAlabama(2) As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Create array for Alabama and add items.

    arrAlabama(0) = "http://www.rolltide.com/"
    arrAlabama(1) = "http://www.crimsontidehoops.com/"
    arrAlabama(2) = "http://centralalabamapride.org/"

End Sub

Private Sub cboSelectState_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSelectState.SelectedIndexChanged
    ' Populate the link label.
    If cboSelectState.SelectedIndex = 0 Then
        lnklblLinkbox.Text = arrAlabama(0) _
                            & vbNewLine & arrAlabama(1) _
                            & vbNewLine & arrAlabama(2)
    End If

End Sub

我还有大约 3 个其他 arrStateName 类型的数组,所以我的 SelectedIndex 将跨越从 [0][3],每个数组将包含 3 个 URL 链接。

那么我哪里错了?如果有人可以在正确的方向上给我一个推动力,我将不胜感激。有些人建议使用Dictionary 数据类型,但我是新手,当我尝试测试它时,我很沮丧,因为它似乎没有产生我想要的结果。使用TKeyTValue 会让我失望,而且我永远无法将所有链接都显示在框中。我使用Integer 作为我的键,使用String 作为我的值(链接),但无法使其工作。一些急需的指导将不胜感激。我正在尝试做的事情是否可行,或者我应该使用其他一些控件类型吗?

【问题讨论】:

  • 这3个链接去哪里了?是否要为每一个动态创建 LinkLabels?
  • 您有 2 个答案,这是怎么回事?有什么问题吗?
  • 有点忙,抱歉。我给了你一个赞成票,因为你的回答很有用。但它的代码比我需要的要多,因为我的状态列表现在已经扩大。 Valter 对我想要使用的东西有一个很好的形式,我可以用我已经拥有的东西来解释。
  • 没关系,谢谢你回来。

标签: arrays vb.net dictionary combobox linklabel


【解决方案1】:

创建一个类对象:

Public Class StateLinks
 Public Property State As String
 Public Property Links As New List(Of String)
 Public Overrides Function ToString() As String
   'tells the combobox what to display
   Return State 
 Public Sub New(state As String)
   Me.State = state
 End Sub
End Class

将一些 statesLinks 加载到 List(OF T):

Private stateLinksList As New List(Of StateLinks)
Private Sub LoadMe() Handles Me.Load
  Dim coState As New StateLinks("Colorado")
  coState.Links.Add("some link")
  stateLinksList.Add(coState)
  ' continue adding then bind them
  cboSelectState.DataSource = stateLinksList
End Sub

从选择中获取链接:

Private cb_selectionChanged() Handles cboSelectState.SelectedIndexChanged
  Dim state = TryCast(cb.SelectedItem, StateLinks)
  If Not state Is Nothing
    For Each link As String In state.Links
      'each link now available
    Next
  End If

【讨论】:

    【解决方案2】:

    添加一个 RichTextBox 并设置 Detect Urls = trueBorderStyle = NoneBackcolor = 表单颜色,如果是在表格上。大小应该足够大以容纳网址。那么

    Private Sub cboSelectState_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSelectState.SelectedIndexChanged
        'Populate RichTextBox1.
        If cboSelectState.SelectedIndex = 0 Then
            RichTextBox1.Text = arrAlabama(0) _
                            & vbNewLine & arrAlabama(1) _
                            & vbNewLine & arrAlabama(2)
        End If
    
    End Sub
    

    Private Sub RichTextBox1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkClickedEventArgs) Handles RichTextBox1.LinkClicked
        Dim txt As String = e.LinkText 'txt is the link you clicked
    End Sub
    

    变态

    【讨论】:

    • 谢谢你,Valter...这就是我一直在寻找的,我可以从这个表单中构建。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-11-17
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多