C# 从其父页调用UserControl方法

C# 从其父页调用UserControl方法,c#,user-controls,parent-child,C#,User Controls,Parent Child,我得到了这样一种方法,从用户控件调用父页面方法。这个“DisplayMessage”函数只接受字符串变量消息并将其显示在屏幕上。 在用户控件中,我放置了一个文本框和一个按钮。在按钮的click事件中,我使用反射调用上面讨论的父页面方法,并将文本框的值传递给该方法,然后调用该方法,并在屏幕上显示消息 父页面: public void DisplayMessage(string message) { Response.Write(message); } 用户控制: protected voi

我得到了这样一种方法,从用户控件调用父页面方法。这个“DisplayMessage”函数只接受字符串变量消息并将其显示在屏幕上。 在用户控件中,我放置了一个文本框和一个按钮。在按钮的click事件中,我使用反射调用上面讨论的父页面方法,并将文本框的值传递给该方法,然后调用该方法,并在屏幕上显示消息

父页面:

public void DisplayMessage(string message)
{
   Response.Write(message);
}
用户控制:

protected void btnSend_Click(object sender, EventArgs e)
{
    this.Page.GetType().InvokeMember("DisplayMessage",System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { txtMessage.Text });
}
这对我来说很好

现在我需要的是,我必须从父页面调用UserControl中存在的方法


请推荐我。提前感谢。

当您将控件放置在页面上时,无论您将
ID=“
属性设置为什么,都是可以用于从页面中引用它的变量名

因此,如果您的页面如下所示:

<my:UserControl runat="server" ID="myControl" />
从父控件在用户控件中调用的方法必须是公共的。如果该方法是私有的或受保护的,则无法从父级调用该方法


此外,this.page将为您提供对页面对象的引用,而不是通过反射调用页面函数

如果您在基本页中实现DisplayMessage,然后从中继承

您可以将此.Page强制转换为BasePage,然后以这种方式调用该方法:)


我想我找到了最简单的方法

只需在用户控件的构造函数中传递父控件的引用

this.animationControl = new VideoEditor.AnimationControl(this);
在用户控件的构造函数中,将父窗体的引用保存在局部变量中

public AnimationControl(Form1 form)
{
        _form1 = form;
        // other initialization stuff
}
现在通过这个局部变量“\u form1”从父类访问任何内容

示例

_form1.MessageFromAnimationControl(choosenAnim);
访问子对象中的父对象变量/方法,或将子对象的变量发送给父对象

我希望它能帮助某人:)

public AnimationControl(Form1 form)
{
        _form1 = form;
        // other initialization stuff
}
_form1.MessageFromAnimationControl(choosenAnim);