2009-03-27 27 views
0

Ich habe eine Datagridview auf einem Formular mit einem zugeordneten SelectionChanged-Ereignis.Invalidate macht nichts

Wenn die ausgewählte Zeile enthält „Anhänge“, dann die Hintergrundfarbe der btnComments Kontrolle sollte vergilben wie folgt:

int noAttachments = 1; 

    if (noAttachments > 0) 
     btnAttachments.BackColor = Color.Yellow; 
    else 
     btnAttachments.BackColor = normalColour; 

    btnAttachments.Invalidate(); 

Der Code funktioniert wie erwartet, außer dass die Invalidate() Anruf tut nichts! d.h. die Farbe des Knopfes ändert sich nicht!

Irgendwelche Ideen warum?

Antwort

1

Ich glaube nicht, es ist der Aufruf zu Invalidate. Wenn überhaupt, ist Invalidate hier nicht erforderlich, vorausgesetzt, dass diese Schaltfläche ein Steuerelement ist. Wenn Sie den Status eines Steuerelements ändern, ist das Steuerelement dafür verantwortlich, dass es sich selbst ungültig macht. Wenn Sie also die BackColor-Eigenschaft des Steuerelements geändert haben, sollte es sich selbst für ungültig erklärt haben, was das Repaint auslösen würde.

Sind Sie sicher, dass die BackColor-Eigenschaft für das Steuerelement unterstützt wird, das btnAttachments ist (ich gehe davon aus, dass es sich um einen normalen Button handelt, aber möglicherweise nicht)?

Anfrage für weitere Informationen:

Es kommt auch zu mir, dass, weil dies ein Datagridview ist, dass Sie tatsächlich den Verweis auf die richtige Kontrolle nicht haben, die verwendet wird, um die Taste zu machen. Das DataGridView hat ein Konzept von Vorlagen für Steuerelemente für eine Zeile/Spalte/Zelle und dann die tatsächliche Instanz, die es verwendet.

Sie müssen zeigen, wie Sie die Schaltfläche für diese bestimmte Zeile/Zelle/Spalte erhalten.

+0

btnAttachments ist eine normale Tastensteuerung. Selbst mit oder ohne den Invalidate-Aufruf ändert sich die Farbe der Schaltfläche nicht! – Calanus

+0

@Calanus: Was darauf hindeutet, dass es nicht der Aufruf zum Invalidieren ist. Sind Sie sicher, dass noAttachments größer als 0 ist? Bist du sicher, dass normale Farbe nicht Gelb ist? – casperOne

+0

normalColor ist die Standardfarbe des Schaltflächensteuerelements - also grau. Ich bin durch den Code gegangen und die btnAttachments.Color = Color.Yellow wird definitiv ausgelöst ... – Calanus

0

Das sollte funktionieren. Im Idealfall sollten Sie Invalidate nicht aufrufen müssen, wenn Sie die BackColor-Eigenschaft ändern.

Sind Sie sicher, dass normalColor! = Color.Yellow?