使用方法更改标签可见性 - 为什么它不会隐藏

本文关键字:隐藏 为什么 标签 可见性 使用方法 | 更新日期: 2023-09-27 18:36:15

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

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之后,没有任何反应。你能帮我让它消失吗?

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

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#,几周前才开始学习,所以也许我错过了一些明显的东西。感谢您的帮助!

使用方法更改标签可见性 - 为什么它不会隐藏

标签实际上

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

解决方法是要求父级尽早绘制自己:

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

时间足够长以需要此类反馈的代码应该改为在工作线程中运行。 使用后台工作线程或任务。

也许尝试通过引用将标签传递到您的方法中?

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

我认为这段代码的唯一问题是,由于标签正在 UI 线程中刷新,它将再次等待 paint 事件。

有关答案,请查看此链接为什么不会控制过程中的更新/刷新

只需在可见/启用更改后执行以下行,工作就完成了!

//Explicit call for render
this.Update();