使用方法更改label.visibility - 为什么不隐藏?

Eld*_*lor 3 c# methods winforms

我希望能够使用方法将任何标签的可见性设置为true或false.我有这个代码:

private void Change_Visible(Label toBeChanged)
{
    if (toBeChanged.Visible == false)
    {
        toBeChanged.Visible = true;
    }
    else
    {
        toBeChanged.Visible = false;
    }
    toBeChanged.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

我用以下代码调用此代码:

    Change_Visible(myLabel);
    //
    // Do other things
    //
    Change_Visible(myLabel);
Run Code Online (Sandbox Code Playgroud)

在我的具体示例中,myLabel设置为在我的表单加载时不可见.在第一次调用Change_Visible之后它变得可见,但在第二次调用Change_Visible之后没有任何反应.你能帮助我让它消失吗?

我已经尝试了一些寻找解决方案的其他逻辑 - 例如:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还没有得出任何结论.我自己学习C#并在几周前开始学习,所以也许我错过了一些明显的东西.谢谢你的帮助!

Han*_*ant 5

在父项重绘其背景,绘制以前由标签控件绘制的像素之前,标签实际上不会对用户不可见.这不会发生在您的代码中,仅在主线程空闲并重新进入消息循环时才会发生绘制.它不是空闲的,它正在执行那些"其他事情".

解决方法是让父母提前画画:

myLabel.Visible = false;
this.Update();
//
// Do other things
//
myLabel.Visible = true;
Run Code Online (Sandbox Code Playgroud)

运行时间足以需要这样反馈的代码应该在工作线程中运行.使用BackgroundWorker或任务.