14

私の素晴らしいマッチングゲームの作成中に;)私は完全に手の届かない問題を見つけました。

プレーヤーがシンボルの付いた2つのラベルを選択したら、他のすべてのラベルを4秒間ロックします。

しかし、そうすると、すべてのラベルの前色が灰色に変わり、記号が表示されます。私の質問は-ForeColorビジュアルC#で無効になっているラベルのを変更する方法はありますか?

プロジェクトはWinFormアプリケーションです。

現時点では、コードでラベルの色を次のように設定しています。

label1.ForeColor = lable1.BackColor;

ユーザーがラベルをクリックすると、次のように変更します。

lable1.ForeColor = Color.Black;
4

2 に答える 2

12

再定義されたペイントイベントを使用して独自のラベルを作成するだけです。

protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e )
{
    if ( Enabled )
    {
        //use normal realization
        base.OnPaint (e);
        return;
    }
    //custom drawing
    using ( Brush aBrush = new SolidBrush( "YourCustomDisableColor" ) )
    {
        e.Graphics.DrawString( Text, Font, aBrush, ClientRectangle );
    }
}

テキストの描画中は、テキスト形式のフラグに注意してください。

于 2011-05-14T15:20:34.830 に答える
10

Windowsが無効なコントロールを描画する方法を変更するよりも簡単な方法は、を効果的に「無効」にするときにフラグを設定LabelClickイベントハンドラーメソッドでそのフラグの値を確認してから、必要なアクションを実行することです。コントロールが「無効」になっている場合は、何もしないでください。

このようなもの:

private bool labelDisabled = false;

private void myLabel_Click(object sender, EventArgs e)
{
    if (!labelDisabled)
    {
        this.ForeColor = SystemColors.ControlText;
    }
}

SystemColorsまた、のようなものの代わりに常に使用する必要があることに注意してくださいColor.Black
特定の色の値をハードコーディングすると、ユーザーがデフォルトのWindowsテーマをカスタマイズするときに競合することがよくあります。Raymond Chenは、彼のブログの記事でこれの危険性について説明しています。

于 2011-05-14T15:17:00.273 に答える