Lauf - Wechsel mit Textbox

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Lauf - Wechsel mit Textbox

    Hallo zusammen....

    Habe 8 Textboxen die wie ein Lauflicht Ihre Textfarbe ändern sollen...wo ist mein Gedanken Fehler?? ?(

    VB.NET-Quellcode

    1. Dim Wechsel(7)
    2. Wechsel(0) = LFeld1.ForeColor = Color.Green
    3. Wechsel(1) = LFeld2.ForeColor = Color.Green
    4. Wechsel(2) = LFeld3.ForeColor = Color.Green
    5. Wechsel(3) = LFeld4.ForeColor = Color.Green
    6. Wechsel(4) = LFeld5.ForeColor = Color.Green
    7. Wechsel(5) = LFeld6.ForeColor = Color.Green
    8. Wechsel(6) = LFeld7.ForeColor = Color.Green
    9. Wechsel(7) = LFeld8.ForeColor = Color.Green
    10. Static Wechsel_weiter As Integer = 0
    11. Wechsel_weiter = Wechsel_weiter + 1
    12. If Wechsel_weiter > 7 Then Wechsel_weiter = 0


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Wechsel(0) = LFeld1.ForeColor = Color.Green führt dazu, dass in Wechsel(0) True oder False drinsteht. Ist das beabsichtigt? Schwer erkenntlich, da Du in Zeile#1 keine Typdeklaration drin, wir also nicht wissen ob Wechsel() ein Boolean-Arraqy sein soll oder nicht. Also arbeitest Du mit Option Strict Off. Böse :evil:
    Desweiteren: Wenn das alles an relevantem Code ist: Wo passiert da die Änderung der Farben? Außer in Z#11-#13 passiert ja nix, da jene Zeilen inhaltlich unabhängig von den restlichen Zeilen ist.

    btw: den Zweizeiler am Ende kannst Du ersetzen durch: Wechsel_weiter = (Wechsel_weiter + 1) Mod 8. Und statt ner Static-Variable würd ich mit ner Klassenvariable arbeiten. Static ist doch VB6-Kram, oder täusch ich mich? Ja, ich weiß, ist ein offizielles Keyword. Aber das ist GoTo auch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @Otti Im Prinzip so was wie RadioButton in einem Panel.
    Wenn Du einen auf "Leuchtem" setzt, dürfen alle anderen nicht leuchten.
    Also Alle löschen und dann den einen anschalten.
    Danach invalidisieren, da sieht man kein Flackern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Moin.

    Weis nicht ob es das eleganteste ist, habe es allerdings nun so geschafft zu lösen.

    VB.NET-Quellcode

    1. ​Private wechsel()
    2. Private Index As Integer
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.wechsel = {Me.Label1, Me.Label2, Me.Label3, Me.Label4, Me.Label5, Me.Label6, Me.Label6, Me.Label7, Me.Label8}
    5. Me.Index = 0
    6. Me.Label1.ForeColor = Color.Green
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Dim indexNew = Me.Index + 1
    10. If indexNew >= Me.wechsel.Length Then
    11. indexNew = 0
    12. End If
    13. Me.wechsel(indexNew).ForeColor = Color.Green
    14. Me.wechsel(Me.Index).ForeColor = Nothing
    15. Me.Index = indexNew
    16. End Sub
    @Otti Machst Du Option Strict On.
    Einer Variable vom Typ Color kann man kein Nothing zuweisen, dafür gibt es Color.Empty bzw. die Default-Hintergrundfarbe.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Otti na dann poste mal den Code und die Deklaration der betreffenden Variable.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Otti Ähm.
    Poste doch dwenigstens die komplette Zeile, ich kenne Deinen Code nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Sorry....

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Public Class Form1
    3. Private wechsel()
    4. Private Index As Integer
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Me.wechsel = {Me.Label1, Me.Label2, Me.Label3, Me.Label4, Me.Label5, Me.Label6, Me.Label7, Me.Label8}
    7. Me.Index = 0
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Timer1.Stop()
    11. Me.wechsel(Me.Index).foreColor = Color.Empty
    12. Me.wechsel(0).foreColor = Color.Red
    13. End Sub
    14. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    15. End Sub
    16. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    17. Dim indexNew = Me.Index + 1
    18. If indexNew >= Me.wechsel.Length Then
    19. indexNew = 0
    20. End If
    21. Me.wechsel(indexNew).foreColor = Color.Red
    22. Me.wechsel(Me.Index).foreColor = Color.Empty
    23. Me.Index = indexNew
    24. End Sub
    25. End Class

    Otti schrieb:

    Sorry....
    in welcher Zeile?
    Sei doch bitte etwas kooperativer und lass Dir nicht jede Information einzeln aus der Nase ziehen.
    ====

    VB.NET-Quellcode

    1. Private wechsel() As Label

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    "Sorry" , war auf meine nicht ganz nette Kooperation bezogen.

    Klappt nun soweit, Danke. habe nun noch einen Schritt den ich gerne erstellen möchte.
    Da dies noch zu meinem "Spielautomaten" Programm gehört, würde ich dies gerne noch erweitern.
    Das Ergebnis soll dann wie beim "Hochdrücken" am Automat aussehen.
    Könnte dies natürlich so umsetzten wie im obrigen Code, allerdings würde ich zuviele Timer nutzen.
    Zusätzlich wäre auch ein Zufallsprinzip ganz sinnvoll.

    Könntest du mir einen Tip eines Ansatzes geben? Wüsste nicht wie ich am besten anfangen könnte.

    Mit einer IF Schleife ist es bestimmt nicht elegant.

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

    Definiere

    Otti schrieb:

    Das Ergebnis soll dann wie beim "Hochdrücken" am Automat aussehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Wir sagen mal,
    Label1 -> 10cent
    Label2 -> 20cent
    Label3 -> 30cent
    usw.
    zusätlich kommt Label0 hinzu, was 0,0cent wären.
    Dann die Reihenfolge wie an einem Spielautomat (Hochdrücken am Spielautomat). Ein wechsel zwischen 10cent und 0cent und das mit einem Zufall. Entscheidet der Zufall zu 10cent (label1), dann soll es weiter gehen mit 20cent und 0cent, ebenfalls via Zufall, usw.
    Würde bestimmt in einer IF Schleife gehen, aber bestimmt nicht die beste Lösung.
    @Otti Wie / Wann sollen die denn angezeigt werden?
    Was hat das mit Zufall zu tun?
    Bitte etwas umfangreicher, ausführlicher, damit ich nicht dauernd nachfragen muss.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Label0.text ="0 Punkte"
    Label1.text ="100 Punkte"
    Label2.text ="200 Punkte"
    Label3.text ="500 Punkte"
    usw. bis Label8.text ="5000 Punkte". Siehe Anhang

    Die Ausspielung soll mit einem Button1 ausgelöst werden, meine damit, sobald Button1_Click erfolgt, soll ein wechsel blinken (dachte an einen Timer 500ms) zwischen 0 Punkten (Label0.text) und der ersten Stufe 100 Punkte (Label1.text) erfolgen.
    Da es ein Glückspiel ist, würde ich gerne einen Zufallsgenerator einbauen wollen.
    Durch betätigen eines zweiten Button, soll der Zufallsgenerator bei Button2_Click entscheiden ob 100 Punkte (Label1.text) durch den Zufall gewählt wurden, oder nicht. Sollte der Zufallsgenerator sich für 0 Punkte entschieden, eine MsgBox.Show ="Verloren", sollte jedoch der Zufall 100 Punkte sein, dann sollte es sich wieder holen , mit 0 Punkten (Label0.text) und 200 Punkten (Label2.text).
    Zusätlich kommt der Button3_Click hinzu der als Stop funktioniert und die jeweilige Gewinn Summe in einer MsgBox.Show = Label2.text (sprich 200 Punkte) gewonnen anzeigen soll.
    Hoffe ich habe meine Gedanken verständnisvoll niedergeschrieben.
    Bilder
    • Unbenannt.PNG

      22,13 kB, 168×1.386, 34 mal angesehen
    Für mich leider nicht. Im ersten Teil wird per Zufall entschieden, ob 0 Punkte oder 100 Punkte. Wenn 0 Punkte, dann verloren. Wenn 100 Punkte, dann ... ach Moment. Dann kann der Spieler entscheiden, ob er den Gewinn mitnimmt und das Spiel beendet oder ob er weiterzocken will. Ok. Woran scheitert es jetzt konkret? Was soll der Zufallsgenerator genau machen? Sollen die Labels in Spielstufe 1 immer zwischen 0 und 100 hin- und herschaltend im 500-ms-Schritten blinken und dann der Zufallsgenerator irgendwann stoppen und das Resultat verkünden oder soll nach 10 Sekunden Ende sein und alle 500 ms wird das aktuell "gewählte" Label gewechselt oder eben auch nicht?

    btw:

    Otti schrieb:

    Mit einer IF Schleife ist es bestimmt nicht elegant.
    If-Schleife
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @VaporiZed

    Wenn 100 Punkte, dann ... ach Moment. Dann kann der Spieler entscheiden​
    genau so ist es gemeint.

    ​Was soll der Zufallsgenerator genau machen? Sollen die Labels in Spielstufe 1 immer zwischen 0 und 100 hin- und herschaltend im 500-ms-Schritten blinken
    ja , und wie von mir geschrieben, mit button2_Click (Das ist bei mir der Risikotaster) in die nächste Spielstufe gehen, sprich es soll sich wiederholen, allerdings dann mit 0Punkte und 200Punkte.

    Versteht mich bitte nicht falsch, aber habt ihr noch nie einen Spielautomat gesehen? ?(