Hej. Jag har en liten kodsnurra som ser ut som detta (har klippt ner till väsentligheter: Det finns lite olika sätt att lösa det men detta kan vara ett sätt. Tack för hjälpen. Testade även:Skicka vidare värden från button.
Private Sub DoPopulateTabPage()
Dim Conn As SqlConnection = New SqlConnection("Data Source=111.111.111.111;Initial Catalog=TestDB;UID=sa;PWD=sa")
Conn.Open()
Dim Comm As SqlCommand
Comm = New SqlCommand("SELECT * FROM tblTestIDs WHERE CheckOut='Nope'", Conn)
Dim rs As SqlDataReader = Comm.ExecuteReader()
If rs.HasRows = False Then
Dim EmptyTabPage As New TabPage()
EmptyTabPage.Text = "Finns nada att visa"
TabControl1.TabPages.Add(EmptyTabPage)
Dim lblEmpty As New Label
lblEmpty.Text = "Här var det tomt"
EmptyTabPage.Controls.Add(lblEmpty)
Else
Dim x As Integer
x = 0
Do While rs.Read()
Dim myTabPage As New TabPage()
myTabPage.Text = "(" & (TabControl1.TabPages.Count + 1) & ")" & " IDnum: " & rs("IDnum").ToString()
TabControl1.TabPages.Add(myTabPage)
Dim lblCaption As New Label
lblCaption.Left = 1
lblCaption.Top = 5
lblCaption.AutoSize = True
lblCaption.Text = "IDnum: " & rs("IDnum")´
myTabPage.Controls.Add(lblCaption)
Dim btnName As New Button
btnName.Text = "Checka ut"
btnName.Top = 400
btnName.Left = 0
myTabPage.Controls.Add(btnName)
AddHandler btnName.Click, AddressOf Checkout_Click
Dim btnPrint As New Button
btnPrint.Text = "Skriv ut"
btnPrint.Top = 400
btnPrint.Left = 80
myTabPage.Controls.Add(btnPrint)
AddHandler btnPrint.Click, AddressOf Print_Click
x = x + 1
Loop
End If
rs.Close()
Conn.Close()
End Sub
Private Sub Checkout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show("Clicked Checkout")
DoPopulateTabPage()
End Sub
Private Sub Print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show("Clicked Print")
DoPopulateTabPage()
End Sub
Jag skulle i Checkout_Click vilja lägga till en SQL UPDATE och köra, men då måste jag veta vilket IDnum som Checka ut knappen tillhör, hur gör jag lättast detta?
//Johannes
Sv: Skicka vidare värden från button.
När su skapar knappen för Checkout så kan du t ex använda dig av "Tag" egenskapen för att spara ditt IDnum värde.
<code>
Dim btnName As New Button
btnName.Text = "Checka ut"
btnName.Top = 400
btnName.Left = 0
btnName.Tag = IDnum
myTabPage.Controls.Add(btnName)
AddHandler btnName.Click, AddressOf Checkout_Click
</code>
I din knapphändelse Checkout_Clicked så har du en parameter som heter "sender" den talar om vad det var som genererade händelsen.
<code>
Private Sub Checkout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show(String.Format("Clicked Checkout for IDnum {0}", CType(sender, Button).Tag))
DoPopulateTabPage()
End Sub
</code>
CType(sender, Button) konvertera sender som är av typen "object" till en "Button". I en skarp applikation borde man kolla att sender verkligen är av typen button men i detta exempel förutsätter vi det.
I och med att vi säger att sender är av typen Button så kommer vi åt egenskapen "Tag" och kan då läsa av IDnum som vi lagrat där.
Händelsen kan även skrivas om så här om det blir tydligare för dig.
<code>
Private Sub Checkout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim pressedButton As Button = CType(sender, Button)
MessageBox.Show(String.Format("Clicked Checkout for IDnum {0}", pressedButton.Tag))
DoPopulateTabPage()
End Sub
</code>
eller så här, där du kommer åt att läsa info på din TabPage
<code>
Private Sub Checkout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If (TypeOf sender Is Control) Then
If (TypeOf CType(sender, Control).Parent Is TabPage) Then
With CType(sender, Control).Parent
MessageBox.Show(String.Format("Clicked Checkout for '{0}'", .Text))
End With
End If
End If
DoPopulateTabPage()
End Sub
</code>
som sagt var, det finns många sätt att lösa det på.Sv:Skicka vidare värden från button.
Dim nIDnum As Long
nIDnum = DirectCast(sender, Button).Tag
Det verkade med göra vad det skulle.