none
Überprüfen Ob die Backcolor eines Panels nicht die und die Farbe hat RRS feed

  • 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?

     

     

    Samstag, 11. Dezember 2010 11:59

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/
    Montag, 13. Dezember 2010 15:21
  • 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
    Samstag, 11. Dezember 2010 12:08
    Moderator
  • 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:
    
    FeldLU.BackColor = Color.White
    
    
    
    schöne Grüße Ellen
    Ich benutze/ I'm using VB2008 & VB2010
    Sonntag, 12. Dezember 2010 21:02

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
    Samstag, 11. Dezember 2010 12:08
    Moderator
  • 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.

    Samstag, 11. Dezember 2010 12:34
  • 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:
    
    FeldLU.BackColor = Color.White
    
    
    
    schöne Grüße Ellen
    Ich benutze/ I'm using VB2008 & VB2010
    Sonntag, 12. Dezember 2010 21:02

  • 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
    
    
    
    schöne Grüße Ellen
    Ich benutze/ I'm using VB2008 & VB2010

    Also 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

    Montag, 13. Dezember 2010 14:40
  • 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/
    Montag, 13. Dezember 2010 15:21
  • scheiße...

    ich hab den timer net auf enabled gestellt...^^

    man kann sich auch fehler machen wo keine sind :D

    danke für den tipp...

     

    *schäm* das ich euch mit so ner dummheit aufgehalten hab

     

    Mit vielem Dank darthbuster

    Montag, 13. Dezember 2010 16:04
  • 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
    Montag, 13. Dezember 2010 19:06
    Moderator
  • 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
    Danke für den Tipp werde ich dann ab jetzt immer so machen...
    Montag, 13. Dezember 2010 19:52
  •  

    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
    Dienstag, 14. Dezember 2010 07:17