用户自定义控件(UserControl)用法大全

时间:2022-09-08 00:09:28

1.动态加载用户控件,并利用反射机制给控件赋值

UserControl uc= (UserControl) LoadControl ("../myUserControl.ascx") ; 
Type myusertype = uc.GetType();

PropertyInfo  info1 = myusertype.GetProperty("subID");

info1.SetValue(uc , subID , null);

2.利用反射调用控件中的方法,并传值

UserControl uc = (UserControl)PlaceHolder1.Controls[0];
Type userType = uc.GetType();
MethodInfo m = userType.GetMethod("submit");
object[] objParas = new object[1];
objParas[0] = subjectID;
m.Invoke(uc, objParas);

3.在用户控件中触发主页面的事件(事件委托)

 ①首先,在一aspx页面中包含一用户控件(RaiseControl.ascx),该用户控件内含有一服务器端控件。

 ②在该用户控件的后台代码中声明事件委托、定义事件成员并添加一事件监视函数。代码如下:
      
       //声明事件委托
        public delegate void PageChangeEventHandler(string psDeliver);
       //定义事件
        public event PageChangeEventHandler MyPageChange;
       //监视事件
        protected void OnPageChange(string psStr)
        {
            if (MyPageChange != null)
           {
                MyPageChange(psStr);
           }
        }
  
 //在用户控件的按钮事件中,触发已经定义的MyPageChange事件。
        protected void btnRaise_Click(object sender, EventArgs e)
        {
             string _sStr = "你点击了用户控件中的按钮!";
             OnPageChange(_sStr);      
        }

 ③在其所在的页面中编写相应的处理函数并在页面的Page_Load中将该处理函数绑定到用户控件中定义的MyPageChange事件。
      
        protected void Page_Load(object sender, EventArgs e)
        {
           //利用+=进行事件委托绑定
             ctlRaiseControl.MyPageChange += this.DealwithReceived;
        }
       
        /**//// <summary>
        /// 为用户控件中MyPageChange事件定义的处理函数
         /// </summary>
        /// <param name="psReceive"></param>
        private void DealwithReceived(string psReceive)
        {
            lblReceive.Text = psReceive;
        }