1

How can i find out which dynamic link has been clicked on Visual Basic? I have some LinkLabels created dynamically according to a dataset, and i want to open a new form that contains the information from that dataset, but i need to know how to load the form according to the link clicked.. code below... //This function creates linklabels according to the rows in the datatable

Sub DynamicLabels()
    Dim i As Integer
    Dim x As Integer = 14
    Dim y As Integer = 50
    Dim tp As TabPage = tabControl1.TabPages(1)
    If db.HasConnection() Then
        If db.SQLDS IsNot Nothing Then
            db.SQLDS.Clear()
        End If
        db.RunQuery("SELECT c.courseSubj AS Subject, c.courseNum AS CourseNum, r.className AS ClassName, t.tName AS Professor
                    FROM course c, classRoom r, teacher t, classroom_student u, student s
                    WHERE c.courseId=r.course_id AND t.teacherId=r.teacher_id AND s.studentId=u.student_id AND u.classroom_id=r.classId AND s.sUsername='" & Login.Usr.Text & "' ")
        For i = 0 To db.SQLDS.Tables(0).Rows.Count - 1
            ReDim MyLabel(db.SQLDS.Tables(0).Rows.Count)
            y += 50
            With MyLabel(i)
                MyLabel(i) = New LinkLabel()
                MyLabel(i).Name = "linklabel" & i.ToString
                MyLabel(i).Location = New Point(x, y)
                MyLabel(i).Size = New Size(700, 40)
                MyLabel(i).Font = New Font("Microsoft Sans Serif", 14)
                MyLabel(i).Text = String.Format(CType(db.SQLDS.Tables(0).Rows(i).Item("Subject"), String) & " " & CType(db.SQLDS.Tables(0).Rows(i).Item("CourseNum"), String) & " " & CType(db.SQLDS.Tables(0).Rows(i).Item("ClassName"), String) & ": " & CType(db.SQLDS.Tables(0).Rows(i).Item("Professor"), String))
                AddHandler MyLabel(i).LinkClicked, AddressOf label_LinkClicked
            End With
            tp.Controls.Add(MyLabel(i))
        Next
    End If
End Sub

I want to load a new form containing some information from the dataset.

  • The sender parameter in the clicked event tells you the instance. Cast it to a LinkLabel. – LarsTech Nov 21 '18 at 18:55
  • Do i need to create a function with these parameters? how can i do that? – SpanishCode Nov 21 '18 at 21:00
  • See [VB.NET What is Sender used for?](https://stackoverflow.com/q/11713250/719186) – LarsTech Nov 21 '18 at 21:04
  • In your click event handler, just cast the sender like `dim lbl as LinkLabel = ctype(sender, LinkLabel)` and then you can access its Name() property that you have set...or just `dim labelname as string = directcast(sender, linklabel).name` – soohoonigan Nov 21 '18 at 21:15
  • Why a LinkLabel? They are for displaying hyperlinks, internet URL's . How about a plain old Label? – Mary Nov 22 '18 at 04:26
  • Why String.Format? I don't see anything that needs this method, just a concatenated string. – Mary Nov 22 '18 at 04:28

1 Answers1

0

I just added one label to demonstrate. Each Label you add would have the same Event procedure (the AddressOf part) but the Add Handler refers directly to the new label variable (mylabel.Click)

Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim mylabel As New Label With {
            .Text = "New Label",
            .Name = "newLabel",
            .Location = New Point(400, 100)
        }
        AddHandler mylabel.Click, AddressOf aLabel_Click
        Controls.Add(mylabel)
End Sub

And here is your event procedure

Private Sub aLabel_Click(sender As Object, e As EventArgs)
        Dim EventLabel As Label = DirectCast(sender, Label)
        Dim LabelText As String = EventLabel.Text
        'or any other property of the label you need to use
        MessageBox.Show(LabelText)
End Sub
Mary
  • 14,926
  • 3
  • 18
  • 27