[英]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.