4

メソッドを使用して、ラベルの可視性を true または false に設定できるようにしたいと考えています。私はこのコードを持っています:

private void Change_Visible(Label toBeChanged)
{
    if (toBeChanged.Visible == false)
    {
        toBeChanged.Visible = true;
    }
    else
    {
        toBeChanged.Visible = false;
    }
    toBeChanged.Refresh();
}

このコードを次のように呼び出します。

    Change_Visible(myLabel);
    //
    // Do other things
    //
    Change_Visible(myLabel);

私の特定の例では、フォームの読み込み時に myLabel が表示されないように設定されています。Change_Visible を最初に呼び出した後は表示されますが、Change_Visible を 2 回呼び出した後は何も起こりません。消えるのを手伝ってくれませんか?

私はすでに解決策を探している他のいくつかのロジックを試しました - 例えば:

private void Change_Visible(Label toBeChanged)
{
    if (toBeChanged.Visible == false)
    {
        toBeChanged.Visible = true;
        toBeChanged.Refresh();
        return;
    }
    if (toBeChanged.Visible == true)
    {
        toBeChanged.Visible = false;
        toBeChanged.Refresh();
        return;
    }
}

私は結論に達していません。私は自分で C# を学んでいて、ほんの数週間前に始めたばかりなので、明らかな何かが欠けている可能性があります。ご協力いただきありがとうございます!

4

4 に答える 4

8

親がその背景を再描画し、ラベル コントロールによって以前に描画されたピクセルを塗りつぶすまで、ラベルは実際にはユーザーに表示されません。これはコードでは発生しません。ペイントは、メイン スレッドがアイドル状態になり、メッセージ ループに再び入るときにのみ発生します。アイドル状態ではなく、それらの「その他のこと」を実行しています。

回避策は、親に自分自身を早期にペイントするように依頼することです。

myLabel.Visible = false;
this.Update();
//
// Do other things
//
myLabel.Visible = true;

このようなフィードバックが必要なほど長く実行されるコードは、代わりにワーカー スレッドで実行する必要があります。BackgroundWorker または Task を使用します。

于 2013-10-19T22:02:57.103 に答える
0

Visible/Enable の変更後に次の行を実行するだけで、作業は完了です!

//Explicit call for render
this.Update(); 
于 2015-05-28T09:36:47.240 に答える