Benutzer mit den meisten Antworten
Überprüfen Ob die Backcolor eines Panels nicht die und die Farbe hat

Frage
-
Hi,
ich möchte mein Programm mittels eines Timers überprüfen lassen ob ein Panel zur Zeit nicht die und die Farbe hat.
Wenn ich das allerdings mittels eines Not-Operators versuchte kriege ich die Meldung das der Not-operator nicht für
den Typ Systems.Drawing.Color definiert ist.
Wie kann ich das Problem anders lösen?
Antworten
-
Hallo,
ich habe gerade mal Deinen code nachgebildet und es funktioniert wie es soll. Kann es sein, dass Du bei Deinen Timer entweder die enabled property nicht auf true oder die start() methode nicht gesetzt/aufgerufen hast ?
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:38
-
Hallo,
Wenn ich das allerdings mittels eines Not-Operators versuchte kriege ich die Meldung das der Not-operator nicht für
den Typ Systems.Drawing.Color definiert ist.
Wie kann ich das Problem anders lösen?
Mit dem <> Operator:
Dim color1 As Color = Color.Green Dim color2 As Color = Color.Blue If color1 <> color2 Then MsgBox("Color1 ist nicht Color2") End If
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:38
-
Ok jetzt funktioniert zwar das überprüfen aber ein weiteres Problem aufgetreten:
Ich habe ein Tic Tac Toe Feld bestehend aus 9 panels die Ich als FeldLO usw. bezeichnet habe.
Ein timer überprüft nun alle 200 ms ob alle felder eine andere farbe als Weiß haben:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() End If End Sub
Wenn das so ist dann soll die Methode Weißfärben() ausgeführt werden die als Beispiel so aussieht:
Private Sub WeißFärben() Dim Weiß As New Color Weiß = Color.White FeldLU.BackColor = Weiß End Sub
Es soll also z.B. das FeldLU wieder auf Weiß gefärbt werden und damit sozusagen zurückgesetzt werden.
Wenn nun aber alle Felder eine andere Farbe als Weiß haben tut sich nichts.
Hallo,rein logisch gesehen ist der Code in Ordung. Ich vermute hier ein timing Problem. Setze den Timer für die Dauer der Ausführung der Methode aus:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick TimLeeren.enabled = False If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() TimLeeren.enabled = True End If End Sub
Der zweite Teil lässt sich einfacher schreiben:
schöne Grüße EllenFeldLU.BackColor = Color.White
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:39
Alle Antworten
-
Hallo,
Wenn ich das allerdings mittels eines Not-Operators versuchte kriege ich die Meldung das der Not-operator nicht für
den Typ Systems.Drawing.Color definiert ist.
Wie kann ich das Problem anders lösen?
Mit dem <> Operator:
Dim color1 As Color = Color.Green Dim color2 As Color = Color.Blue If color1 <> color2 Then MsgBox("Color1 ist nicht Color2") End If
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:38
-
Ok jetzt funktioniert zwar das überprüfen aber ein weiteres Problem aufgetreten:
Ich habe ein Tic Tac Toe Feld bestehend aus 9 panels die Ich als FeldLO usw. bezeichnet habe.
Ein timer überprüft nun alle 200 ms ob alle felder eine andere farbe als Weiß haben:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() End If End Sub
Wenn das so ist dann soll die Methode Weißfärben() ausgeführt werden die als Beispiel so aussieht:
Private Sub WeißFärben() Dim Weiß As New Color Weiß = Color.White FeldLU.BackColor = Weiß End Sub
Es soll also z.B. das FeldLU wieder auf Weiß gefärbt werden und damit sozusagen zurückgesetzt werden.
Wenn nun aber alle Felder eine andere Farbe als Weiß haben tut sich nichts.
-
Ok jetzt funktioniert zwar das überprüfen aber ein weiteres Problem aufgetreten:
Ich habe ein Tic Tac Toe Feld bestehend aus 9 panels die Ich als FeldLO usw. bezeichnet habe.
Ein timer überprüft nun alle 200 ms ob alle felder eine andere farbe als Weiß haben:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() End If End Sub
Wenn das so ist dann soll die Methode Weißfärben() ausgeführt werden die als Beispiel so aussieht:
Private Sub WeißFärben() Dim Weiß As New Color Weiß = Color.White FeldLU.BackColor = Weiß End Sub
Es soll also z.B. das FeldLU wieder auf Weiß gefärbt werden und damit sozusagen zurückgesetzt werden.
Wenn nun aber alle Felder eine andere Farbe als Weiß haben tut sich nichts.
Hallo,rein logisch gesehen ist der Code in Ordung. Ich vermute hier ein timing Problem. Setze den Timer für die Dauer der Ausführung der Methode aus:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick TimLeeren.enabled = False If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() TimLeeren.enabled = True End If End Sub
Der zweite Teil lässt sich einfacher schreiben:
schöne Grüße EllenFeldLU.BackColor = Color.White
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:39
-
Hallo,rein logisch gesehen ist der Code in Ordung. Ich vermute hier ein timing Problem. Setze den Timer für die Dauer der Ausführung der Methode aus:
Private Sub TimLeeren_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimLeeren.Tick TimLeeren.enabled = False If FeldLO.BackColor <> Color.White And FeldOben.BackColor <> Color.White And FeldRO.BackColor <> Color.White And FeldLinks.BackColor <> Color.White And FeldMitte.BackColor <> Color.White And FeldRechts.BackColor <> Color.White And FeldLU.BackColor <> Color.White And FeldUnten.BackColor <> Color.White And FeldRU.BackColor <> Color.White Then WeißFärben() TimLeeren.enabled = True End If End Sub
Der zweite Teil lässt sich einfacher schreiben:
FeldLU.BackColor = Color.White
Ich benutze/ I'm using VB2008 & VB2010Also ich hab es so probiert und es tut sich immer noch nichts...
Zu deinem Code mal ne Frage:
wenn ich den Timer am Anfang des Ticks ausetzte ist er doch nie akiviert oder??
Und dann: Wenn die Methode ausgeführt wird steht da ja in anderen Worten
If FeldLU.Backcolor <> Color.White then FeldLU.Backcolor = Color.White
Ist das nicht an sich ein logischer fehler?
Dort müsste doch eigentlich eine art neue Backcolor vorhanden sein also so etwas wie:
set backcolor to white...
Nur diesen Befehl gibt es in der Form nicht
MfG Darthbuster
-
Hallo,
ich habe gerade mal Deinen code nachgebildet und es funktioniert wie es soll. Kann es sein, dass Du bei Deinen Timer entweder die enabled property nicht auf true oder die start() methode nicht gesetzt/aufgerufen hast ?
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert Robert BreitenhoferModerator Samstag, 15. Januar 2011 11:38
-
Hallo,
ich hab den timer net auf enabled gestellt...^^
man kann sich auch fehler machen wo keine sind :D
solche Fehler kannst Du schneller finden, indem Du einen Haltpunkt zu Beginn der Methode setzt. Während des Debugging muss die Ausführung an der Stelle anhalten. Wird das Ereignis nie aufgerufen, stimmt entweder etwas mit dem Ereignisempfänger nicht oder wie beim Timer, ist dieser gar nicht erst enabled.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo,
solche Fehler kannst Du schneller finden, indem Du einen Haltpunkt zu Beginn der Methode setzt. Während des Debugging muss die Ausführung an der Stelle anhalten. Wird das Ereignis nie aufgerufen, stimmt entweder etwas mit dem Ereignisempfänger nicht oder wie beim Timer, ist dieser gar nicht erst enabled.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Und dann: Wenn die Methode ausgeführt wird steht da ja in anderen Worten
If FeldLU.Backcolor <> Color.White then FeldLU.Backcolor = Color.White
Ist das nicht an sich ein logischer fehler?
Dort müsste doch eigentlich eine art neue Backcolor vorhanden sein also so etwas wie:
set backcolor to white...
Nur diesen Befehl gibt es in der Form nicht
MfG Darthbuster
Hallo, diese Programmzeilen sind in Ok. Ich schreibe mal etwas anderers zum Verständinis:Dim A = False
If Not A then A = True
das ist die gleiche Logik. Fällt der Groschen?
Also das funktioniert so:
Zunächst wird die logische Bedingung geprüft und dann die Anweisung (oder ein Abweisungsblock) ausgeführt.
Während der Ausführung der Anweisung kann die Bedingung auch unwahr- genau False - werden. Das heist aber nicht, dass die komplette Code Zeile ungültig wird und nicht ausgeführt wird.
Ich benutze/ I'm using VB2008 & VB2010- Bearbeitet Ellen Ramcke Samstag, 18. Dezember 2010 21:56 Nachtrag