Variable im Timer bringt beim 2. Durchlauf? Fehler

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Variable im Timer bringt beim 2. Durchlauf? Fehler

    Hallo Profis, ich knoble schon seit Stunden rum und kriegs nicht hin... Ich generiere eine Variable Public Shared CReiner As String in einer Procedure dann weise ich dieser z.B. den Wert "Red" zu.
    In einem Timer dann übergebe ich den Wert in eine Listbox. Urplötzlich dann erscheint der Fehler: Wert darf nicht Null sein. Nun die Frage kann es sein, dass die Variable irgendwann sozusagen leer wird? Ich danke Euch gleich mal für jeden hilfreichen Tip!!! :)

    beanbear6 schrieb:

    Wert darf nicht Null sein
    Meinst Du Nothing (Du redest von VB.NET)?
    Poste mal den relevanten Code.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Farbübergabe an mehrfach geöffnete Form

    Hallo RodFromGermany, hab nun eine Kurzfassung meines Problems gemacht. Ziel ist es, dass die EXE-Datei auf einem Share von mehreren Personen (ziel > 30) gestartet wird. Auf der Form sind dann die Kollegen aufgeführt. Bei Klick mit der linken Maustaste wird das Label des Users grün (anwesend) mittlere Maustaste orange (beschäftigt) und rot (nicht da oder Mittag). Über den Timer (1sec.) soll die angeklickte Farbe dann an alle geöffneten Forms übergeben werden. Das funktioniert dann, wenn ich die Farbe als feste Eingabe: Beispiel xxx = Color.Aquamarine übergebe. Wenn ich die Farbe über die Variable: Color.FromName(Farbe) übergebe tut sich nix... Ich versteh das nicht. Ich bitte Dich/Euch um Hilfe, sonst such ich noch tagelang...
    Hier der Quelltext und als Bild ein Screenshot. Vielen vielen Dank Dir/Euch, wenn ihr mir zur Lösung helfen wollt... (Das Problem mit dem einstigen Fehler: Wert dar nicht NULL sein ist mit diesem Code nicht mehr da...)

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Public Class Form1
    3. Public Shared Farbe As String
    4. '################################################################################################################## Form laden Listbox füllen
    5. '################################################################################################################## und Farbe setzen
    6. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    7. Me.Location = New Point(50, 50)
    8. '########## Hier wird beim start den Usern die Startfarbe Grau übergeben und in die List-Box eingetragen.
    9. LogFarbe.SelectedIndex = 0 : LogFarbe.Items.Item(0) = "Gray" : L_Lisa.ForeColor = Color.Gray : Farbe = LogFarbe.Items.Item(0).ToString
    10. End Sub
    11. '################################################################################################################## Userfarbe ändern
    12. Private Sub L_Lisa_MouseDown_1(sender As Object, e As MouseEventArgs) Handles L_Lisa.MouseDown
    13. If e.Button = MouseButtons.Left Then : L_Lisa.ForeColor = Color.LimeGreen : LogFarbe.Items.Item(0) = "LimeGreen" : End If
    14. If e.Button = MouseButtons.Middle Then : L_Lisa.ForeColor = Color.Orange : LogFarbe.Items.Item(0) = "Orange" : End If
    15. If e.Button = MouseButtons.Right Then : L_Lisa.ForeColor = Color.Red : LogFarbe.Items.Item(0) = "Red" : End If
    16. '########## HIER IST NOCH ALLES IN ORDNUNG!!!!!!!!!!!!!!
    17. Farbe = LogFarbe.Items.Item(0).ToString
    18. End Sub
    19. '################################################################################################################## Farbe über Timer
    20. '################################################################################################################## an alle geöffeten Forms übergeben
    21. '################################################################################################################## >>> FEHLER FEHLER FEHLER
    22. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    23. L_Lisa.ForeColor = Color.Aquamarine ' Wird an alle Fenster übergeben
    24. L_Lisa.ForeColor = Color.FromName(Farbe) ' hier wird die Farbe nicht an alle Fenster übergeben, nur an das Fenster wo geklickt wurde.
    25. End Sub
    26. End Class
    Bilder
    • Screenshot.png

      561,1 kB, 1.377×1.073, 38 mal angesehen

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „beanbear6“ ()

    @beanbear6
    Sieh Dir mal an, was da tatsächlich ausgegeben wird:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. L_Lisa.ForeColor = Color.Aquamarine ' Wird an alle Fenster übergeben
    3. Console.WriteLine(L_Lisa.ForeColor)
    4. L_Lisa.ForeColor = Color.FromName(Farbe) ' hier wird die Farbe nicht an alle Fenster übergeben, nur an das Fenster wo geklickt wurde.
    5. Console.WriteLine(L_Lisa.ForeColor)
    6. End Sub
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi RodFromGermany, ich starte die Anwendung und klicke dann Grün auf Lisa. Ausgabe: einmal Color [Aquamarine} und darunter Color [LimeGreen]. Was meinst Du nun genau?? Das Problem ist ja, dass eine Farbe über die Variable in Zeile4. nicht an alle geöffneten Forms weitergegeben wird, bei direkter Zuweisung Zeile2 jedoch schon... Grübelgrübel..

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

    @beanbear6

    Ich habe eine Frage:
    Warum übergibst du die Farbe als "String" und nicht als "Color"?

    VB.NET-Quellcode

    1. ​Public Shared Farbe As Color


    Das vermeidet doch Fehler und Du kannst die Farbe ohne Umwandlung zuweisen.
    Das Problem mit dem nicht weitergeben... Die Instanz ...
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @beanbear6 So was:

    VB.NET-Quellcode

    1. Sub Farbe(col As Color)
    2. MessageBox.Show(col.ToString())
    3. End Sub
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    beanbear6 schrieb:

    ich kriegs das einfach nicht hin
    Mit 30 Leuten kann ich leider nicht dienen.
    Kannst Du ein äquivalentes Testprojekt machen, das den Effekt mit nur einem weiteren User reproduziert und dieses dann anhängen?
    Und schreib, was getan werden muss, um den Effekt zu reproduzieren.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich weiß jetzt nicht, ob ich das falsch verstehe, aber wo ist denn dein Netzwerk-Code, der die Farben über einen Server oder Peer-to-Peer an die anderen schickt? Wenn 2 unterschiedliche PC's die EXE starten, dann teilen diese sich nicht die gleichen Variablen. Auch nicht die "Shared".