.NET noob here:
为什么我无法在包含面板(包含uc)
的表单中找到该方法// Works and displays "form1"
MessageBox.Show(this.Parent.Parent.Name);
// Produce an error at build
this.Parent.Parent.MethodTest("test");
这是MethodTest
:
public void MethodTest(string newValue)
{
this.textBox1.Text = newValue;
}
的问候, /吨
答案 0 :(得分:2)
因为编译器不知道this.Parent.Parent是什么类型。
使用((form1)this.Parent.Parent).MethodTest("test");
虽然不鼓励这样做。更好地使用另一种方式!
答案 1 :(得分:1)
您必须将父级转换为表单类型
((Form1)this.Parent.Parent).MethodTest("Test");
如果你使用嵌套的表单/控件,这可能会变得棘手,而且你真的不知道哪个表单正在托管它,所以演员可能会失败。我建议传递一名代表。 (这是伪代码顺便说一句)
public delegate MyDelegate(string newValue);
//form
form_load()
{
myControl.MethodDelegate = new MyDelegate(MethodTest);
}
//Control
someEvent()
{
this.MethodDelegate("Test");
}
注意:我刚看到Hans评论,但我建议不要做一个事件,除非你可以正确注销处理程序以防止内存泄漏,我没有看到很多开发人员正确做,但如果你可以,那么甚至可能会更好而不是代表。