【问题标题】:How to toggle visibility in Windows Forms C#如何在 Windows 窗体 C# 中切换可见性
【发布时间】:2020-07-06 00:37:18
【问题描述】:

我有几个标签可以大大改变可见性,当它们发生时我就使用

Label1.Visible = true;
Label2.Visible = true;
Label3.Visible = true;

Label1.Visible = false;
Label2.Visible = false;
Label3.Visible = false;

所以为了使我的代码更具可读性,我想将它们放在一个函数中。但要做到这一点,我需要一个切换可见性的功能,而不是打开或关闭它们。这可能吗?

【问题讨论】:

  • 所以程序员有责任告诉它什么时候发生

标签: c# winforms


【解决方案1】:

你的意思是简单的反转:

void ToggleLabel(Label l)
{ 
    l.Visible = ! l.Visible ;
} 

【讨论】:

    【解决方案2】:

    如果您只提到标签,则可以使用@Stefan 解决方案。

    如果要设置相同类型的所有控件,可以使用:

    private void ButtonAction_Click(object sender, EventArgs e)
    {
      SetLabelsVisibility(this, false, true);
    }
    
    private void SetLabelsVisibility(Control control, bool state, bool recurse = false)
    {
      if ( !recurse )
        Controls.OfType<Label>().ToList().ForEach(c => c.Visible = state);
      else
        foreach ( Control item in control.Controls )
        {
          if ( item is Label )
            item.Visible = state;
          else
          if ( item.Controls.Count > 0 )
            ToggleLabelsVisibility(item, state, recurse);
        }
    }
    

    在表单或任何容器上使用递归将更改所有内部标签(或您想要的任何其他类型的控件)以及内部容器中的所有标签等的可见性。

    要切换可见性,您可以使用条件变量,例如:

    private bool IsSomePanelLabelsVisible = true;
    
    // To initialize at startup if needed
    SetLabelsVisibility(SomePanel, IsSomePanelLabelsVisible);
    
    // To toggle labels
    IsSomePanelLabelsVisible = !IsSomePanelLabelsVisible;
    SetLabelsVisibility(SomePanel, IsSomePanelLabelsVisible);
    

    您可以从上面的代码中简化并获取您需要的代码。

    【讨论】:

      【解决方案3】:

      或者,假设标签以某种方式分组:

      在方法中对它们进行逻辑分组:

      //best of both worlds, a toggle and a setter.
      public void SetLabelVisibility(bool visible)
      {
          Label1.Visible = visible;
          Label2.Visible = visible;
          Label3.Visible = visible;
      }
      public void ToggleLabelVisibility()
      {
          SetLabelVisibility(!Label1.Visible);
      }
      

      另外,您可以将它们放在面板中,然后切换面板的可见性。

      见:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.panel?view=netcore-3.1

      public void TogglePanelVisibility(Panel p)
      {
          p.Visible = !p.Visible;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多