如何从usercontrol调用form-method?

时间:2011-11-18 22:25:26

标签: c# .net winforms

.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; 
}

的问候, /吨

2 个答案:

答案 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评论,但我建议不要做一个事件,除非你可以正确注销处理程序以防止内存泄漏,我没有看到很多开发人员正确做,但如果你可以,那么甚至可能会更好而不是代表。