我有这样的方法从其User Control调用Parent Page方法。这个“DisplayMessage”函数只接受一个字符串变量消息并在屏幕上显示它。 在用户控件中,我放置了一个文本框和一个按钮。在Button的click事件中,我调用了上面讨论的Parent Page方法,我们使用Reflection并将文本框的值传递给方法,然后调用该方法并在屏幕上显示消息。
父页面:
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中存在的方法。
请建议我。在此先感谢。
答案 0 :(得分:5)
无论你将ID=""
属性设置为何时将控件放在页面上,都可以使用变量名来从页面中引用它。
因此,如果您的页面如下所示:
<my:UserControl runat="server" ID="myControl" />
然后你可以这样做:
myControl.MyControlMethod()
来自父级的用户控件中调用的方法必须是公共的。如果它是私有的或受保护的,则无法从父级调用该方法。
此外,不是通过反射调用页面函数,而是you might be better off using events。
答案 1 :(得分:0)
this.Page将为您提供对页面对象的引用。
如果在基页中实现DisplayMessage,然后从该页继承。
你可以将this.Page转换为BasePage,然后调用方法:)
if(this.Page is BasePage)
{
BasePage bs = this.Page as BasePage
bs.DisplayMessage(....)
}
答案 2 :(得分:0)
我想我找到了最简单的方式
只需在用户控件的构造函数中传递父项的引用。
this.animationControl = new VideoEditor.AnimationControl(this);
在用户控件的构造函数中,将父窗体的引用保存在局部变量
中public AnimationControl(Form1 form)
{
_form1 = form;
// other initialization stuff
}
现在通过本地变量'_form1'
访问父类中的任何内容示例强>
_form1.MessageFromAnimationControl(choosenAnim);
访问子级中的父变量/方法或将子变量发送给父级。
我希望它会帮助某人:)