2009-03-27 11 views
0

J'ai un datagridview sur un formulaire avec un événement SelectionChanged associé.Invalidate ne fait rien

Lorsque la ligne sélectionnée contient « pièces jointes », puis la backcolor du contrôle de btnComments devrait jaunir comme suit:

int noAttachments = 1; 

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

    btnAttachments.Invalidate(); 

Le code fonctionne comme prévu, sauf que l'appel ne fait rien Invalidate()! c'est-à-dire que la couleur du bouton ne change pas!

Des idées pourquoi?

Répondre

1

Je ne crois pas que ce soit l'appel à Invalider. Si quelque chose, Invalidate n'est pas nécessaire ici, en supposant que ce bouton est un contrôle. Lorsque vous changez l'état d'un contrôle, le contrôle est responsable de son invalidation. Ainsi, lorsque vous avez modifié la propriété BackColor du contrôle, il aurait dû s'annuler, ce qui déclencherait le repeint. Etes-vous sûr que la propriété BackColor est prise en charge pour le contrôle de btnAttachments (je suppose qu'il s'agit d'un bouton normal, mais ce n'est peut-être pas le cas)?

Demande pour plus d'informations:

Il me vient aussi parce que cela est un DataGridView, que vous n'avez pas fait la référence au contrôle approprié qui est utilisé pour rendre le bouton. DataGridView a un concept de modèles pour les contrôles pour une ligne/colonne/cellule, puis l'instance réelle qu'il utilise.

Vous devez montrer comment vous obtenez le bouton pour cette ligne/cellule/colonne particulière.

+0

btnAttachments est un contrôle de bouton standard. Même avec ou sans l'appel Invalidate, la couleur du bouton ne change pas! – Calanus

+0

@Calanus: Ce qui suggère que ce n'est pas l'appel à Invalider. Êtes-vous sûr que noAttachments est supérieur à 0? Êtes-vous sûr que la couleur normale n'est pas jaune? – casperOne

+0

normalCouleur est la couleur standard du bouton de contrôle, c'est-à-dire grise. J'ai passé à travers le code et le btnAttachments.Color = Color.Yellow est définitivement tirant ... – Calanus

0

Cela devrait fonctionner. Idéalement, vous ne devriez pas avoir besoin d'appeler Invalidate lorsque vous modifiez la propriété BackColor.

Êtes-vous sûr normalColor! = Color.Yellow?

Questions connexes