用户控件(一) ----交换信息

用户控件
用户控件是个什么东西?自定义的反复重用的控件集合

好处?1.代码重用2.结构良好3.分工开发4.局部缓存

难点:
一.交换信息:A、页面操控 用户控件(代码在页面端);B、用户控件操控页面(代码在控件中)
(一)、 A 由页面的控件 向 用户控件中的控件传递信息:
例子:

思路(法一)

1、将页面中要传递的信息读出来;
2、 找到用户控件中接受信息的 控件;
3 、 将信息传给找到的控件
页面 按钮中的代码:
protected void Button1_Click(object sender, EventArgs e)
{
string s = TextBox1.Text;
TextBox textbox1= jiaohuan1.FindControl("textbox1") as TextBox;
textbox1.Text = s;
}
思路(法二)
1、在用户控件中 设置属性
public string textvalue
{
get
{
return TextBox1.Text; // 输出值
}
set
{
TextBox1.Text = value;// 获得值
}

}
2、在页面中的 按钮中的代码:
jiaohuan1.textvalue =TextBox1.Text;

B、用户控件操控页面(代码在控件中)
问题: 从用户控件中向页面传值:由于 用户控件可以同时在多个页面引用,所以无法确定传值的对象:
解决法一、思路: 使用session 传值:
1、 在用户控件中将要传递的值取出来放到 session["values"] 中
2、在页面中使用时 在onloadcompleate 后调用session["values"]
注释:在页面中 输入 override oncomplete 点击enter 后出现框架:
protected override void OnLoadComplete(EventArgs e)
{
if (Session["values"] != null)
{
TextBox1.Text = Session["values"].ToString();
}
}


方法二、 代理(delegate 、 委托) 指向方法(动作)的引用《方法调方法》

代理的使用步骤:
第一步: 使用 delegate 定义一个新的代理类型。
public delegate 返回类型 代理类型名( 参数定义);
例如:public delegate void ShowDelegate(string s);
第二步:使用新的代理类型定义一个变量(代理变量)
ShowDelegate Show;
第三步:把代理变量指向一个新的方法
Show = new ShowDelegate(方法名);
第四步:通过调用代理来实现对方法的调用。
Show("hello");
例子:


//步骤一、 声明 代理类型(用户控件中)
public delegete void showDelegate(string s)
//步骤二、 定义代理变量(用户控件中)
public showdelegate show;

****************此步写在页面端页面加载(Page_load 中)******************************
//步骤三、 让代理指向方法 (告诉代理你要做的具体事情)
TestUC.show = new testuc.showdelegate(setvalues);

private void setvalues(string s)
{
textbox2.text = s;
}
**********************************************

********************此步写在用户控件中点击按钮中**************************
//步骤四、通过 调用代理来实现对方法的调用
if(show!=null)
{
string s = textbox1.text;
show(s);
}

 

posted on 2015-08-26 10:43  a-po  阅读(140)  评论(0编辑  收藏  举报