簡體   English   中英

如何在 Windows Forms C# 中切換可見性

[英]How to toggle visibility in Windows Forms C#

我有幾個標簽可以大大改變可見性,當它們發生時我只使用

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

或者

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

因此,為了使我的代碼更具可讀性,我想將它們放在 function 中。 但要做到這一點,我需要一個 function 來切換可見性,而不是打開或關閉它們。 這可能嗎?

你的意思是簡單地反轉:

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

如果您只提到標簽,則可以使用@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);

您可以簡化並從上面獲取所需的代碼。

或者,假設標簽以某種方式分組:

在方法中對它們進行邏輯分組:

//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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM