从其父页调用UserControl方法

本文关键字:UserControl 方法 调用 | 更新日期: 2023-09-27 17:59:21

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

父页面:

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的父页面调用一个存在于其中的方法。

请推荐我。提前谢谢。

从其父页调用UserControl方法

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

所以,如果你的页面看起来像这样:

<my:UserControl runat="server" ID="myControl" />

然后你可以做:

myControl.MyControlMethod()

在用户控件中从父控件调用的方法必须是公共的。如果它是私有的或受保护的,则不能从父级调用该方法。

此外,与其通过反射调用页面函数,不如使用事件。

this.Page将为您提供对页面对象的引用。

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

你可以投这个。Page作为BasePage,然后以这种方式调用方法:)

if(this.Page is BasePage)
{
   BasePage bs = this.Page as BasePage
   bs.DisplayMessage(....)   
}

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

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

this.animationControl = new VideoEditor.AnimationControl(this);

并且在用户控件的构造函数中保存局部变量中父窗体的引用

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

现在通过这个局部变量"_form1"访问父类中的任何内容

示例

_form1.MessageFromAnimationControl(choosenAnim);

访问child中的parents变量/方法,或将child的变量发送给parent。

我希望它能帮助到某人:)