gpt4 book ai didi

c# - 在 winform 中获取控件的父级

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:39 31 4
gpt4 key购买 nike

我在这个 Panel2 和这个 Panel3 里面有 Panel1 ...所以想象一下

Panel1->Panel2->Panel3->button1

那么如何获得像这样的路径字符串

string path=\Panel1\Panel2\Panel3\button1

如果我想获得button1的所有父级。
我可以通过定义一个实现 IExtenderProvider 的类来做到这一点吗,所以是否可以在设计时实现它。

最佳答案

这是一个扩展方法,可以将所有 parent 的姓名作为 IEnumerable<string> 获取。 :

public static class Extensions
{
public static IEnumerable<string> GetControlPath(this Control c)
{
yield return c.Name;

if (c.Parent != null)
{
Control parent = c.Parent;

while (parent != null)
{
yield return parent.Name;
parent = parent.Parent;
}
}
}
}


这是我添加到将使用它的项目的 UserControl 的属性:

public partial class CustomControl : UserControl
{
public CustomControl()
{
InitializeComponent();
}

public string ControlPath
{
get
{
return string.Join(@"\", this.GetControlPath().Reverse());
}
}
}


构建后,将用户控件从工具箱拖到窗体上。一定要把它嵌套在其他控件里面就好了。我嵌套了 3 个面板并将其放在与您的示例类似的最里面的面板中。以下是设计时的属性:

User Control Properties

这应该适用于您创建的派生自 Control 的任何类. IExtenderProvider在这里似乎无关紧要。

关于c# - 在 winform 中获取控件的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471631/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com