如何检查控件是否是另一个控件的子控件? “Control.IsChildOf”
我有3个面板:
如何检查P
是否是ParentPanel
子项? 是否有一些LINQish方法可以做到这一点?
有没有比我提供的更优化的方式? 也许使用Linq?
我最终制作了一个递归扩展方法
public static bool IsChildOf(this Control c, Control parent) { return ((c.Parent != null && c.Parent == parent) || (c.Parent != null ? c.Parent.IsChildOf(parent) : false)); }
导致
P.IsChildOf(ParentPanel); // true ParentPanel.IsChildOf(P); // false
您可以进行递归搜索:
Panel topParent = GetTopParent(P);
private Panel GetTopParent(Panel child) { if (child.Parent.GetType() == typeof(Panel)) return GetTopParent((Panel)child.Parent); else return child; }
也许是这样的:
var p = Page.FindControl("ParentPanel") as Panel; var res = p.Controls.AsQueryable().OfType().Any(x => x.ID == "P");
(免责声明:未经测试)
我没有测试过,但应该工作:
bool IsParent(Control child, Control parent) { return child.CliendID.StartsWith(parent.ClientID); }
除非你有ClientIDMode = Static
编辑:这个工作甚至ID你设置ClientIDMode
bool IsParent(Control child, Control parent) { return child.NamingContainer != null && (child.NamingContainer == parent || IsParent(child.NamingContainer, parent)); }
bool isChildofParent = false; foreach (Control ctl in ParentPanel.Controls) { if (ctl.Controls.Contains(P)) { isChildofParent = true; break; } }