zweistellige Zahlen über Buttons eingeben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von fraju.

    zweistellige Zahlen über Buttons eingeben

    Hallo ich möchte über Button's eine zweistellige Zahl eingeben.

    Button 1 ist die 1, Button 2 ist die 2 usw. Die Zahl soll mindestens zwei Stellen haben (Es soll die Eingabe einer Temperatur werden also z.B. 35°C) Die Zahl soll nach der Eingabe über ein Label auf dem Bildschirm dargestellt werden.

    Wie kann man sowas realisieren?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thanas“ ()

    Thanas schrieb:

    ist irgendwie ganz einfach Danke

    und außerdem noch völlig ungeil.

    EIN Eventhandler reicht völlig.
    Nenn die buttons Button0 bis Button9 und dann:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. For i = 0 To 9
    3. Me.Controls("Button" & i.ToString).Text = i.ToString
    4. AddHandler Me.Controls("Button" & i.ToString).Click, AddressOf MyClick
    5. Next
    6. End Sub
    7. Private Sub MyClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    8. Label1.Text &= DirectCast(sender, Button).Text
    9. End Sub


    Sauber, elegant (imho) und ultrakurz
    Auch Anfänger sollten versuchen, es gleich "richtig" zu lernen. Dazu gehört auch, sich das "Problem" genau zu überlegen und nachzudenken, wie man es wohl am besten lösen könnte. DANN schreibt man den entsprechenden Code dazu.

    Was wird gewollt?
    Immer wenn ein Button geklickt wird, soll der Text des Buttons an den Text des Labels angehängt werden.
    Das "Click" Event bekommt (in sender) den Button übergeben, der das Event ausgelöst hat. Da die Funktion ansonsten für alle buttons gleich ist, reicht offensichtlich EIN eventhandler.
    EINEN Eventhandler für alle Buttons erzeugt man mit AddHandler.

    Das hat auch den vorteil, dass man zB die Überprüfung (label länge > 2) genau hier machen kann. Ansonsten müsste man das ja in jedem Button-Event prüfen. Und spätestens wenn man dann noch Buttons für Backspace, Clear, OK usw dazupackt wirds superunübersichtlich und damit fehleranfällig.

    Im Prinzip ist das mit dem AddHandler nix anderes als das "Control Array" aus VB6. Das hatte halt den Vorteil, dass einem die IDE das gleich vorgeschlagen hat. "Wollen Sie ein Control Array anlegen?"

    Nachtrag:
    Hier mal ein Beispiel, das zeigt, wie man sich das Leben einfacher machen kann:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private lbl As Label
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim lp As New FlowLayoutPanel With {.Dock = DockStyle.Fill}
    5. Me.Controls.Add(lp)
    6. lbl = New Label With {.Name = "Temp"}
    7. lp.Controls.Add(lbl)
    8. For Each s As String In New String() {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "<", "CLR", "OK"}
    9. lp.Controls.Add(New Button With {.Text = s, .Name = "Button_" & s})
    10. AddHandler lp.Controls("Button_" & s).Click, AddressOf MyClick
    11. Next s
    12. End Sub
    13. Private Sub MyClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    14. Dim t As String = DirectCast(sender, Button).Text
    15. Select Case t
    16. Case "0" To "9"
    17. If lbl.Text.Length < 2 Then lbl.Text &= t
    18. Case "<"
    19. If lbl.Text.Length > 0 Then lbl.Text = lbl.Text.Substring(0, lbl.Text.Length - 1)
    20. Case "CLR"
    21. lbl.Text = String.Empty
    22. Case "OK"
    23. If lbl.Text.Length = 2 Then
    24. MachWasMitTemperatur(CInt(lbl.Text))
    25. End If
    26. End Select
    27. End Sub
    28. Private Sub MachWasMitTemperatur(ByVal tm As Integer)
    29. MessageBox.Show("Die Temperatur ist: " & tm.ToString)
    30. End Sub
    31. End Class


    Das ganze funktioniert OHNE das man irgendwelche Controls im Designer auf die Form zieht. Und ist natürlich nur als Beispiel gedacht!
    Daran sieht man schon mal, dass "richtiges" programmieren viel mehr ist als stupides Eventklicken im Designer und dass man durchaus SEHR viele Möglichkeiten in VB hat, um ein Problem elegant zu lösen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Trotzdem züchtet man so alle neuen User gleich zu Copy & Paste Kiddys heran.

    Meine Güte!
    Die C&P-Kiddies werden auch bei zwei kopierten Zeilen ihre Probleme bekommen, wenn sie nicht verstehen, was sie machen. Der Code von Picoflop ist doch das Schönste, was einem hier passieren kann.
    Jetzt gibt es hier nunmal das Grundlagen-Forum, da kann es doch nix besseres geben, als einen übersichtlichen Code zum durchackern zu bekommen.
    Für einen Anfänger (ich auch),sollte der Cod immer Lauffähig sein.
    Es kann sonnst passieren das es noch länger dauert,diesen lauffähig zu machen.

    ..aber es ist schön endlich mal Minicods zu sehen,aber bitte lauffähig,daran lernt man am besten.
    Das wird längerfristig das allgemeine Niveau heben.

    Gruß