Så här ser en typisk bit ut i min kod som jag använder på 44st(har jag för mig) checkChanged på radiobuttons... Varför har flera event procedurer? Hej Andreas! Du skulle kunna skapa en sub som du sedan kallar på i stället för att ha koden på 44 ställen.skapa / anropa subrutin?
Private Sub rb1c_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb1c.CheckedChanged
strCard1Color = Microsoft.VisualBasic.Right(rb1c.Name, 1)
lblCard1Color.Text = strCard1Color
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
End Sub
Det verkar ju lite onödigt att upprepa detta hela tiden då det enda som ändras är:
Private Sub rb1c_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb1c.CheckedChanged
strCard1Color = Microsoft.VisualBasic.Right(rb1c.Name, 1)
... och
End Sub
Jag misstänker att man kan skapa en subrutin som innehåller:
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
... och sen anropa den i varje checkChanged för varje radiobutton sen...
Då måste det ju bli mycket enklare att ev. ändra om det behövs, och framför allt så blir koden mycket mindre...
Men hur gör man för att anropa den?
Säg att ex. gör en subrutin som ser ut så här:
Private Sub SetVariables(ByVal sender As System.Object, ByVal e As System.EventArgs)
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
End Sub
Hur anropar jag den rätt i koden som mao skulle se ut något liknande:
Private Sub rb1c_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb1c.CheckedChanged
strCard1Color = Microsoft.VisualBasic.Right(rb1c.Name, 1)
lblCard1Color.Text = strCard1Color
'setVariables <-- här måste den ju in...?
End Sub
Ps. Är "SetVariables" subrutinen rätt skriven?
/Anders
Sv: skapa / anropa subrutin?
JAg är osäker på om man kan lägga till fler i Handles. Men det kan gå med:
Private Sub rb1c_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb1c.CheckedChanged, rb2c.CheckedChanged, rb3c.CheckedChanged, ...
Dim chkbox as CheckBox = CType(sender, CheckBox)
strCard1Color = Microsoft.VisualBasic.Right(rb1c.Name, 1)
lblCard1Color.Text = strCard1Color
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
End Sub
Private Sub rb1c_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
strCard1Color = Microsoft.VisualBasic.Right(sender.Name, 1)
lblCard1Color.Text = strCard1Color
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
End Sub
'Lägg koden i intierings koden.
AddHandler rb1c.CheckedChanged, AddressOf rb1c_CheckedChanged
AddHandler rb2c.CheckedChanged, AddressOf rb1c_CheckedChanged
AddHandler rb3c.CheckedChanged, AddressOf rb1c_CheckedChanged
AddHandler rb4c.CheckedChanged, AddressOf rb1c_CheckedChanged
'...
Sv:skapa / anropa subrutin?
Om du tittar på följande bild:
<img src="http://www.hyden.nu/poker/snapshot1.gif">
Varje val påverkar sqlfrågan
Private Sub rbCard12_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbCard12.CheckedChanged
strCard1Value = Microsoft.VisualBasic.Right(rbCard12.Name, 1)
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
strCard = strCard1Value & strCard2Value & strSuite
strSql = "SELECT " & strPlayers & " FROM holecards WHERE cards = '" & strCard & "'"
End If
End Sub
Det enda som skiljer alla procedurer ifrån varandra är
strCard1Value = Microsoft.VisualBasic.Right(rbCard12.Name, 1)
Nästa i ordningen heter rbCard13, rbCard14.. ovs...
Vad jag menar är att man borde kunna skapa en subrutin eller något som man anropar direkt efter strCard1Value...
Det är möjligt att det var precis det du beskrev, men isf förstod jag inte hur du menar.
Jag skulle vilja att subrutinen, eller vad det heter, är döpt till "setCard1Value"
Sv: skapa / anropa subrutin?
Du lägger alltså den kod som inte ändras i en subrutin och läggaer bara till den kod som ändras på varje av de 44 ställena.
Skapa sub
sub setCard1Value()
lblCard1Color.Text = strCard1Color
If strCard1Color = "" Or strCard2Color = "" Then
Exit Sub
Else
If strCard1Color = strCard2Color Then
strSuite = "s"
Else
strSuite = "o"
End If
End If
lblSuited.Text = strSuite
If strCard1Value = "" Or strCard2Value = "" Or strSuite = "" Then
Exit Sub
Else
lblCard.Text = strCard1Value & strCard2Value & strSuite
End If
End sub
Kalla på subrutinen
'ev kod som skall köras innan
call setCard1Value()