如果我将控件加载到表单A中,我有一个具有以下功能的控件。
private void button1_Click(object sender, EventArgs e)
{
var C = this.Parent.Parent.Parent.Parent.Parent as STP2Main;
C.DisposeControl(STP_Data.Data.ConfigConfigResource);
}
如果我将控件加载到表单B中,我需要这样写:
private void button1_Click(object sender, EventArgs e)
{
var C = this.Parent.Parent.Parent as STP2Main;
C.DisposeControl(STP_Data.Data.ConfigConfigResource);
}
这是有效的。但我真的不喜欢this.Parent.Parent...
(最多5次父)如果我在var C
行设置断点,我看到它指向[STP_Design.STP2Main]
但是当我将函数更改为var C = STP_Design.STP2Main as STP2Main;
我收到错误消息:
'STP_Design.STP2Main'是'type',在给定的上下文中无效
如何摆脱Parent.Parent.Parent部分?
答案 0 :(得分:0)
如果父控件是Form
,您可以使用
var C = this.ParentForm as SomeControlName;
我希望这会有所帮助。
答案 1 :(得分:0)
这并不是那么难。只需继续检查控件的父级,直到你没有父母检查,或找到一个正确的类型。我写这篇文章有点笼统;您可以将它用于任何类型的父级(只是将它放在泛型类型中)而不是使用特定的操作,我已经为父窗体上调用的方法提供了参数。
public static void DisposeMainParent<T>(this Control control, Action<T> disposal)
where T : Control
{
Control temp = control;
T mainControl = null;
for (Control c = control; c != null && mainControl == null; c = c.Parent)
{
mainControl = temp as T;
}
if (mainControl != null)
{
disposal(mainControl);
}
}