Het komt in programma's regelmatig voor dat het ene gebeurt als de gebruiker een bepaalde keuze maake, en iets anders als de gebruiker een andere keuze maakt. In een website is dit ook zeker zo. Denk bijvoorbeeld maar aan een loginscherm met een selectievakje waarmee u kunt bepalen of uw gebruikersnaam en eventueel uw wachtwoord worden bewaard, zodat u de volgende keer dat u de website bezoekt niet hoeft in te loggen. Om dit soort functionaliteit te kunnen maken, bevat iedere programmeertaal een (of meerdere) constructie(s) waardoor u bepaalde code onder bepaalde voorwaarden kunt laten uitvoeren. VB.NET en C# bevatten hiervoor twee verschillende mogelijkheden: een If-statement of een Case-statement. In principe kan een If-statement hetzelfde en meer als een Case-statement, en is het verschil dat een Case-statement in sommige gevallen wat efficiδnter werkt. Omdat er functioneel echter geen verschil bestaat, laten we een uitleg van het Case-statement achterwege. In de documentatie die bij de .NET Framework SDK zit kunt u hierover informatie vinden door te zoeken naar Select Case statement (VB.NET) of switch keyword (C#).
Een If-statement is van de vorm "als voorwaarde dan mogelijkheid1 anders mogelijkheid2", zodat u dus afhankelijk van de voorwaarde code al dan niet uit kunt voeren. De voorwaarde is in principe een expressie die resulteert in een Boolean waarde. Is de Boolean waarde True, dan wordt mogelijkheid 1 uitgevoerd, en anders (als de Boolean waarde False is), dan wordt mogelijkheid 2 uitgevoerd. Hoe dit werkt wordt het duidelijkst met een voorbeeld.
VB.NET
<%@ Page Language="VB" %> <script runat="server"> Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) If RadioButtonList1.SelectedItem.Value = "Vet" Then Label1.Font.Bold = True Else Label1.Font.Bold = False End If End Sub </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:RadioButtonList id="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Value="Gewoon" Selected="True">Gewoon</asp:ListItem> <asp:ListItem Value="Vet">Vet</asp:ListItem> </asp:RadioButtonList> </p> <p> <asp:Label id="Label1" runat="server"> Hoe wordt dit weergegeven? </asp:Label> </p> </form> </body> </html>
C#
<%@ Page Language="C#" %> <script runat="server"> void RadioButtonList1_SelectedIndexChanged(Object sender, EventArgs e) { if(RadioButtonList1.SelectedItem.Value == "Vet") { Label1.Font.Bold = true; } else { Label1.Font.Bold = false; } } </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:RadioButtonList id="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Value="Gewoon" Selected="True">Gewoon</asp:ListItem> <asp:ListItem Value="Vet">Vet</asp:ListItem> </asp:RadioButtonList> </p> <p> <asp:Label id="Label1" runat="server"> Hoe wordt dit weergegeven? </asp:Label> </p> </form> </body> </html>
De code hierboven geeft twee keuzerondjes weer en een Label control. De tekst in de Label control wordt vet weergegeven afhankelijk van de keuze die de gebruiker maakt. Standaard staat de tekst niet vet weergegeven. Wanneer de gebruiker een andere optie selecteert, vindt er automatisch een postback plaats. Nadat de gebruiker voor Vet heeft gekozen, wordt de tekst in de Label control vet weergegeven, zoals in figuur 1.
Figuur 1, Label control die vet wordt weergegeven na de keuze van de gebruiker.
Figuur 1 is het resultaat van de evaluatie van de expressie die kijkt of RadioButtonList1.SelectedItem.Value gelijk is aan de tekst "Vet". Als dit zo is, wordt de code uitgevoerd die de Label control vet maakt, anders de code die de Label control juist niet vet maakt. In het geval dat u meer mogelijke keuzes heeft, kunt u If-statements aan elkaar knopen, zoals in de code hieronder.
VB.NET
<%@ Page Language="VB" %> <script runat="server"> Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) If RadioButtonList1.SelectedItem.Value = "Vet" Then Label1.Font.Bold = True Label1.Font.Italic = False ElseIf RadioButtonList1.SelectedItem.Value = "Cursief" Then Label1.Font.Bold = False Label1.Font.Italic = True ElseIf RadioButtonList1.SelectedItem.Value = "VetCursief" Then Label1.Font.Bold = True Label1.Font.Italic = True Else Label1.Font.Bold = False Label1.Font.Italic = False End If End Sub </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:RadioButtonList id="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Value="Gewoon" Selected="True">Gewoon</asp:ListItem> <asp:ListItem Value="Vet">Vet</asp:ListItem> <asp:ListItem Value="Cursief">Cursief</asp:ListItem> <asp:ListItem Value="VetCursief">Vet en Cursief</asp:ListItem> </asp:RadioButtonList> </p> <p> <asp:Label id="Label1" runat="server"> Hoe wordt dit weergegeven? </asp:Label> </p> </form> </body> </html>
C#
<%@ Page Language="C#" %> <script runat="server"> void RadioButtonList1_SelectedIndexChanged(Object sender, EventArgs e) { if(RadioButtonList1.SelectedItem.Value == "Vet") { Label1.Font.Bold = true; Label1.Font.Italic = false; } else if(RadioButtonList1.SelectedItem.Value == "Cursief") { Label1.Font.Bold = false; Label1.Font.Italic = true; } else if(RadioButtonList1.SelectedItem.Value == "VetCursief") { Label1.Font.Bold = true; Label1.Font.Italic = true; } else { Label1.Font.Bold = false; Label1.Font.Italic = false; } } </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:RadioButtonList id="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Value="Gewoon" Selected="True">Gewoon</asp:ListItem> <asp:ListItem Value="Vet">Vet</asp:ListItem> <asp:ListItem Value="Cursief">Cursief</asp:ListItem> <asp:ListItem Value="VetCursief">Vet en Cursief</asp:ListItem> </asp:RadioButtonList> </p> <p> <asp:Label id="Label1" runat="server"> Hoe wordt dit weergegeven? </asp:Label> </p> </form> </body> </html>
In de code hierboven worden achter elkaar meerdere evaluaties gedaan. Als de eerste expressie False oplevert, wordt de tweede expressie geδvalueerd. Als die False oplevert wordt doorgegegaan naar de derde expressie. In VB.NET is hiervoor een speciale constructie, namelijk ElseIf. C# lijkt hetzelfde, en is dat functioneel ook wel, maar hier wordt iedere If-statement eigenlijk als een losse entiteit gezien, terwijl alle vergelijkingen in VB.NET bij elkaar horen. Het resultaat is echter waar het om gaat, en nadat de gebruiker "vetr en Cursief" geselecteerd heeft ziet dat er uit als in figuur 2.
Figuur 2, Meerdere keuzes afhandelen met een If-statement
Zoals gezegd werkt een If-statement op basis van een expressie. Dit kan dus ook een uitgebreide expressie zijn, in plaats van slechts een enkelvoudige vergelijking. In de code hieronder ziet u hier een voorbeeld van.
VB.NET
<%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Label1.Font.Bold = Vet.Checked Label1.Font.Italic = Cursief.Checked If Vet.Checked And Cursief.Checked Then Label1.Text = "Deze tekst is vet en cursief." ElseIf Vet.Checked Then Label1.Text = "Deze tekst is vet." ElseIf Cursief.Checked Then Label1.Text = "Deze tekst is cursief." Else Label1.Text = "Dit is platte tekst." End If End Sub </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:CheckBox id="Vet" runat="server" Text="Vet" AutoPostback="True"> </asp:CheckBox> <asp:CheckBox id="Cursief" runat="server" Text="Cursief" AutoPostback="True"> </asp:CheckBox> </p> <p> <asp:Label id="Label1" runat="server"/> </p> </form> </body> </html>
C#
<%@ Page Language="C#" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { Label1.Font.Bold = Vet.Checked; Label1.Font.Italic = Cursief.Checked; if(Vet.Checked && Cursief.Checked) { Label1.Text = "Deze tekst is vet en cursief."; } else if(Vet.Checked) { Label1.Text = "Deze tekst is vet."; } else if(Cursief.Checked) { Label1.Text = "Deze tekst is cursief."; } else { Label1.Text = "Dit is platte tekst."; } } </script> <html> <head> </head> <body> <form runat="server"> <p> <asp:CheckBox id="Vet" runat="server" Text="Vet" AutoPostback="True"> </asp:CheckBox> <asp:CheckBox id="Cursief" runat="server" Text="Cursief" AutoPostback="True"> </asp:CheckBox> </p> <p> <asp:Label id="Label1" runat="server"/> </p> </form> </body> </html>
In de code hierboven wordt eerst aan de hand van de CheckBox controls de vet en cursief instellingen van de Label control bepaald. Daarna wordt middels een If-statement bepaald welke tekst in de Label control moet komen te staan. Het eerste dat opvalt is dat de expressie waarin dit bepaald wordt niet de waarde van de CheckBox controls vergelijkt met True of False. Aangezien de waardes van zichzelf al Boolean waardes zijn, hoeft dit niet, en kunnen de waardes dus direct in de expressie gebruikt worden. In de eerste expressie wordt gekeken of ze allebei op True staan, en wordt de tekst daar eventueel op aangepast. De volgende expressies kijken of de tekst vet of cursief moet zijn. Als dit allemaal niet het geval is, dan wordt de tekst als platte tekst (zonder vet of cursief) weergegeven. Figuur 3 laat een voorbeeld zien waarin alleen Vet is aangevinkt.
Figuur 3, Weergave van tekst afhankelijk van de aangevinkte keuzes.
⌐2002 Microsoft Nederland BV