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;
}
C#一行代码实现(06)跨线程获取控件值,结合BeginInvoke和EndInvoke使用,以DataGridView为例
原文:https://www.cnblogs.com/easynetwork/p/13872377.html