在 Winform 開發中,窗體(Form)就像一個大容器,可以裝各種各樣的控件,包括 Panel控件。如果窗體是 Winform 中的最大的容器,那么 Panel控件可以算是老二,它專門用於軟件界面的排版,相當於 Web 開發中的層(div),幾乎所有控件都可以包含到 Panel 中,包括窗體。
把控件包含到 Panel 中,一方面是為界面布局美觀(填充不同的背景顏色或圖片),另一方面便於對子控件進行相關的操作。可以通過遍歷的方式獲取控件中包含的所有子控件,從而實現對它們的操作,下面就看如何遍歷窗體中和 Panel 中的子控件。
一、C#遍歷窗體控件
主要遍歷屬於窗體(Form)的控件(Controls),假如窗體中有 Panel、Button 和 TextBox 控件,遍歷代碼如下:
/// <summary>
/// Winform C#遍歷窗體控件
/// </summary>
/// <param name="ctrlName">控件名稱</param>
public void ForeachFormControls(string ctrlName)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is Panel)
{
//相關操作代碼
ctrl.BackColor = Color.Aquamarine;
}
else if (ctrl is Button)
{
ctrl.ForeColor = Color.RoyalBlue;
}
else if (ctrl is TextBox)
{
ctrl.Text = null;
}
//根據控件名稱找某個控件
if(ctrl.Name.Equals(ctrlName))
{
vctrl.Name = string.Empty;
}
}
}
上面的代碼,只是根據控件的類型和傳遞的控件名稱進行了一些隨意操作,可以根據具體需求把它改為所需操作。
二、C# Winform遍歷控件之遍歷 Panel 中的子控件
遍歷方法跟遍歷窗體中的控件相同,只不過 this 要改為 Panel 的名稱,假如 Panel控件中只包含 Button 和 TextBox 子控件,代碼如下:
/// <summary>
/// C#遍歷子控件
/// </summary>
/// <param name="ctrlName">控件名稱</param>
public void ForeachPanelControls(string ctrlName)
{
foreach (Control ctrl in panel1.Controls)
{
if (ctrl is Button)
{
if (ctrl.Name.Equals(ctrlName))
ctrl.ForeColor = Color.RoyalBlue;
else
ctrl.ForeColor = Color.SkyBlue;
}
else if (ctrl is TextBox)
{
if (ctrl.Name.Equals(ctrlName))
ctrl.Name = "當前值";
else
ctrl.Text = null;
}
}
}
2、局部控件為userControl(uWgter),在TabelLayoutPanel查詢userControl(tlp_wgters)的存在,並加入list
PubSource.Wgters = new List<uWgter>(); foreach (Control ct in this.tlp_Wgters.Controls) { if (ct is uWgter) { PubSource.Wgters.Add((uWgter)ct); } }
遍歷list中uWgter,斷連
foreach(uWgter wgter in PubSource.Wgters) { wgter.DisconnectWgter(); }