Ich habe ein Formular mit einem geteilten Panel. In der einen Spalte befindet sich eine Gruppe von Schaltflächen, die programmgesteuert die Farbe der zuletzt gedrückten Schaltfläche ändern soll. Die folgende Schleife scheint korrekt zu funktionieren und die Farben korrekt zu setzen, aber das Formular repräsentiert das nicht. Sobald die Schleife abgeschlossen ist und ich die Schaltflächenfarben erneut überprüfe, kehren sie zum vorherigen Zustand zurück.Button BackColor funktioniert nicht wie erwartet
For Each formControl As Control In Me.FormSplitContainer.Panel1.Controls
If formControl.GetType() Is GetType(Button) Then
If CType(sender, Button) Is CType(formControl, Button) Then
CType(sender, Button).BackColor = Color.White
Else
CType(sender, Button).BackColor = System.Drawing.SystemColors.ControlDark
End If
End If
Next
Ich kann den gewünschten Effekt erzielen, indem ich den folgenden Code tue, aber scheint weniger elegant und würde offensichtlich Updates erfordern, wie Schaltflächen hinzugefügt oder entfernt werden würden.
DataFeedButton.BackColor = System.Drawing.SystemColors.ControlDark
IncentiveButton.BackColor = System.Drawing.SystemColors.ControlDark
CType(sender, Button).BackColor = Color.White
Wer sieht was ich vermisse?
Nicht sicher, warum genau, aber das Hinzufügen innerhalb der Schleife ermöglicht den Code wie erwartet zu arbeiten. Danke –
Ich bin nicht sicher, genau warum cType auf der linken Seite der Zuweisungsanweisung nicht gearbeitet hat, aber es ist sicherer, Absender zu einer Variablen des richtigen Typs zuzuweisen, wenn Sie Änderungen an seinen Eigenschaften vornehmen werden. Es ist möglich, dass der C-Typ außerhalb der Schleife auf eine Kopie des Schaltflächenobjekts optimiert wurde, sodass die Eigenschaftsänderung keinen Einfluss auf die ursprüngliche Schaltfläche hatte. Die Verwendung von cType als Zuweisungsziel erscheint im Allgemeinen ein wenig unzuverlässig. Ich bin mir nicht sicher, warum Sie FormControl Teil der Zeit und Sender Teil der Zeit verwenden. Das könnte ein (oder das) Problem sein. – xpda