C#一行程式碼實現(07)遍歷視窗所有控制元件,通過類和名稱模糊篩選
阿新 • • 發佈:2020-10-25
主要功能
- 遍歷
WinForm
視窗指定控制元件的所有子控制元件,通過類和名稱模糊篩選
一行程式碼
var controls = this.ExGetChildControls(new []{typeof(TextBox)},new []{"name"});
程式碼封裝
/// <summary> /// 獲取所有子控制元件 /// </summary> /// <param name="parentControl">父控制元件</param> /// <param name="controlTypeFilters">控制元件型別篩選,可用typeof(TextBox)或者control.GetType()獲取Type,為null則匹配全部</param> /// <param name="controlNameFilters">控制元件名稱篩選,模糊匹配,為null則匹配全部</param> /// <param name="skipDisabled">是否跳過Disabled控制元件</param> /// <param name="skipReadOnly">是否跳過ReadOnly控制元件</param> /// <returns></returns> public static IList<Control> ExGetChildControls(this Control parentControl, Type[] controlTypeFilters = null, string[] controlNameFilters = null, bool skipDisabled = true, bool skipReadOnly = true) { IList<Control> controlList = new List<Control>(); var controls = parentControl.Controls; foreach (Control item in controls) { var childControls = ExGetChildControls(item, controlTypeFilters, controlNameFilters, skipDisabled, skipReadOnly); foreach (var childControl in childControls) controlList.Add(childControl); if (controlTypeFilters != null && !controlTypeFilters.Contains(item.GetType())) continue; if (controlNameFilters != null && !controlNameFilters.Any(o => item.Name.ToUpper().Contains(o.ToUpper()))) continue; if (skipDisabled && !item.Enabled) continue; if (skipReadOnly) if (item is TextBox textBox) if (textBox.ReadOnly) continue; ProviderTrace.WriteLineJson(new {item.Name, item.GetType().FullName}); controlList.Add(item); } return controlList; }
宣告
- 文章作者:易幾施
- 部落格地址:https://www.cnblogs.com/easynetwork/
- 版權宣告:文章遵循創作共用版權協議,署名、非商業、保持一致,轉載請註明出處。