2009-03-27 6 views
0

関連付けられたSelectionChangedイベントを持つフォーム上にdatagridviewがあります。Invalidateは何もしません

選択された行は、「添付ファイル」次のようにbtnCommentsコントロールの背景色が黄色に変わります含まれている場合:

int noAttachments = 1; 

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

    btnAttachments.Invalidate(); 

を期待通りのコードは無効化()の呼び出しが何もしないことを除いて動作します!すなわち、ボタンの色は変化しない!

なぜでしょうか?

答えて

1

私はそれが無効にするための呼び出しだとは思わない。何があっても、このボタンがコントロールであると仮定すると、ここでは無効にする必要はありません。コントロールの状態を変更すると、コントロール自体が無効になります。したがって、コントロールのBackColorプロパティを変更したときには、それ自体が無効になっているため、再描画がトリガーされます。

btnAttachmentsのコントロールでBackColorプロパティがサポートされていることを確認してください(通常のボタンだとしますが、そうでないかもしれません)。詳細は

要求:

また、これはDataGridViewのがあるので、あなたが実際にボタンをレンダリングするために使用されている適切なコントロールへの参照を持っていないということを私に起こります。 DataGridViewには、行/列/セルのコントロール用のテンプレートと、それが使用する実際のインスタンスの概念があります。

特定の行/セル/列のボタンをどのように取得するかを示す必要があります。

+0

btnAttachmentsは通常のボタンコントロールです。無効化呼び出しの有無にかかわらず、ボタンの色は変化しません! – Calanus

+0

@ Calanus:これは、無効にする呼び出しではないことを示しています。 noAttachmentsが0より大きいと確信していますか?あなたはnormalColourがYellowではないと確信していますか? – casperOne

+0

normalColorは、ボタンコントロールの標準色です。つまり、グレーです。私はコードとbtnAttachments.Color = Color.Yellowを踏んできました.Yellowは確実に発砲しています... – Calanus

0

これはうまくいくはずです。理想的には、BackColorプロパティを変更するときにInvalidateを呼び出す必要はありません。

あなたは本当ですか?normalColor!= Color.Yellow?

関連する問題