Skicka vidare värden från button.
Hej. Jag har en liten kodsnurra som ser ut som detta (har klippt ner till väsentligheter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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
Svara
Sv: Skicka vidare värden från button.
Det finns lite olika sätt att lösa det men detta kan vara ett sätt.
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å.
Svara
Sv:Skicka vidare värden från button.
Tack för hjälpen. Testade även:
1 2 3 | Dim nIDnum As Long nIDnum = DirectCast (sender, Button).Tag |
Det verkade med göra vad det skulle.
Svara