获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件

一、实现效果
在 Winform中窗体(Form)就像一个容器,可以包含所有的控件(比如:panel、button、textedit等控件);如果把窗体看做是 Winform 中最大的容器,那么Panel可以看做第二,Panel控件则是专门用于界面的排版布局,相当于 Web 开发中的层(div),几乎所有控件都可以包含到 Panel 中,包括窗体。

①获取到指定窗体下的所有控件;

②获取到指定Panel下的所有控件;

③获取到窗体下的所有TextEdit类型控件;

④根据控件名称获取到该控件;

二、实现方法
/// <summary>
/// 获取指定窗体或面板下的所有控件
/// </summary>
/// <typeparam name="T">控件类型</typeparam>
/// <param name="containChildControlWindow">包含子控件的窗体(比如窗体是[Controls]、panel是[panel.controls])</param>
/// <returns></returns>
private Stack<Control> GetAllControlOfWindows(Control.ControlCollection containChildControlWindow)
{
Stack<Control> tmpStack = new Stack<Control>();
foreach (Control control in containChildControlWindow)
{
tmpStack.Push(control);
}

return tmpStack;
}



/// <summary>
/// 获取指定窗体或面板下的指定类型的控件
/// </summary>
/// <typeparam name="T">控件类型</typeparam>
/// <param name="containChildControlWindow">包含子控件的窗体(比如窗体是[Controls]、panel是[panel.controls])</param>
/// <returns></returns>
private Stack<T> GetAppointControlOfWindows<T>(Control.ControlCollection containChildControlWindow)
{
Stack<T> tmpStack = new Stack<T>();
foreach (var control in containChildControlWindow)
{
if (control is T)
{
tmpStack.Push((T)control);
}

}

return tmpStack;
}


/// <summary>
/// 通过控件名称获取到控件
/// </summary>
/// <param name="controlName">控件名称</param>
/// <param name="containChildControlWindow">包含子控件的窗体(比如窗体是[Controls]、panel是[panel.controls])</param>
/// <returns></returns>
private Control GetControlOfName(string controlName, Control.ControlCollection containChildControlWindow)
{
if (string.IsNullOrEmpty(controlName)) return null;

foreach (Control item in containChildControlWindow)
{
if (item.Name.Equals(controlName))
{
return item;
}
}

return null;
}

三、调用方法
//获取到窗体下包含的所有控件
private void btn_getAllControlOfWindow_Click(object sender, EventArgs e)
{
Stack<Control> controls = GetAllControlOfWindows(this.Controls);
ShowControlInfo(controls);
}



//获取到Panel下包含的所有控件
private void btn_GetAllControlOfPanel_Click(object sender, EventArgs e)
{
Stack<Control> controls = GetAllControlOfWindows(this.panel1.Controls);
ShowControlInfo(controls);
}



//获取窗体下的所有TextEdit类型控件
private void btn_GetAllTextEditControlOfWindow_Click(object sender, EventArgs e)
{
Stack<TextEdit> controls = GetAppointControlOfWindows<TextEdit>(this.Controls);
ShowControlInfo(controls);
}


//根据输入的控件名称获取控件
private void btn_GetControlOfName_Click(object sender, EventArgs e)
{
//通过控件名称获取控件
string inputControlName = textEdit1.Text.Trim();
Control control = GetControlOfName(inputControlName, this.Controls);
if (control!=null)
{
string strInfo = $"名称为【simpleButton1】的控件信息如为:{control.Name} {control.Text} {control.Size} {control.Enabled = false}";
ShowInfo(strInfo);
}

}





/// <summary>
/// 显示控件信息
/// </summary>
/// <typeparam name="T">控件类型</typeparam>
/// <param name="controlList">控件列表</param>
private void ShowControlInfo<T>(Stack<T> controlList)
{
if (controlList == null || controlList.Count <= 0)
return;

string strTmp = string.Empty;

foreach (var item in controlList)
{
if (item is Control)
{
Control control = item as Control;

strTmp += $"控件名称【{control.Name}】 控件描述【{control.Text}】" + "\r\n";
}

}
strTmp += $"\r\n 共有:{controlList.Count} 个控件";
ShowInfo(strTmp);
}

/// <summary>
/// 显示信息
/// </summary>
/// <param name="info">信息</param>
private void ShowInfo(string info)
{
memoEdit_ShowInfo.Text = info;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值