(急)页面如何响应页面中用户控件中的事件啊?

wohello 2010-02-21 05:23:18
在页面中包含label控件和用户控件,用户控件中包含一个button
点击用户控件中button后,改变页面label控件的Text值
请问要实现这样的功能,代码应该如何编写啊?

谢谢啦
...全文
203 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohello 2010-02-22
  • 打赏
  • 举报
回复
谢谢大家的解答,按jxyxhz给出的网址里面的例子,弄出来了!
结贴给分~
bwangel 2010-02-21
  • 打赏
  • 举报
回复
可以给用户控件自定义事件,比如
public class MyControl:UserControl
{
public event EventHandler MyEvent;

protected void Button1_Click(object sender, EventArgs e)
{
if (MyEvent!=null)
{
MyEvent(s, e);
}
}
}

在控件外部用 MyEvent事件绑定你要执行的方法: MyControl.MyEvent += 方法名;
小_虎 2010-02-21
  • 打赏
  • 举报
回复
也可以Google .net 用户控件 事件
小_虎 2010-02-21
  • 打赏
  • 举报
回复
根据sp1234大哥的讲述,单看他的讲的,可能觉得有点天马行空。。

可以根据这个例子再看看。

http://blog.chinaunix.net/u2/70983/showart_1851903.html
Hogan-Code 2010-02-21
  • 打赏
  • 举报
回复
其实方法很多,上面也说了很多种了
看了半天发现有一个没说,那小弟就来补充一下

我们可以使用 事件和委托

首先: 委托在 页面 || 事件在 用户控件
然后: 定义指定委托类型的事件(定义事件),
button的点击事件中调用事件(引发事件),
最后: 定义委托带参数给label的值,
方法事件的关联(订阅事件),
书写方法(处理事件)。
  • 打赏
  • 举报
回复
学习去了,问题很棒,回答的更棒....
wohello 2010-02-21
  • 打赏
  • 举报
回复
引用 14 楼 wohello 的回复:
谢谢sp1234,先研究下12楼的代码!

不好意思,弄错了,应该是11楼的代码
wohello 2010-02-21
  • 打赏
  • 举报
回复
谢谢sp1234,先研究下12楼的代码!
wohello 2010-02-21
  • 打赏
  • 举报
回复
我也是想像jxyxhz所说那样使用委托实现,只是不知具体如何实现!
sp1234的第2段话,没太看明白,太菜鸟了,呵呵~~
请知道的高手,给个伪码的思路,谢谢啦~
  • 打赏
  • 举报
回复
编程如果你只为了眼前胡乱混过去,你可以随便不择手段地编程。甚至人家用private而隐藏的东西你也可以用反射来强行调用。

我强调的是设计,遵守协议,而不是胡乱写。因为如果胡乱写,你只能欺骗别人一次,当别人的内部结构变了,你写的隐藏在系统源代码中的定时炸弹就会在用户使用时爆炸,使得公司颜面扫地。

所以,不要追求奇技淫巧,一定要优先重视设计规则、接口协议,要可以编写同一接口的不同实现,把那些看似高明实则想当然的代码尽早剔除出来。
  • 打赏
  • 举报
回复
基本上就是这样的思路,页面针对用户控件的接口编程,而不要管用户控件内部是怎么实现的用代码来表达。

实际上在你说明你的设计时,犯了一个比较严重的设计错误。用户控件在设计时只应该说明它要通知宿主什么事情发生了这种业务概念,而不是说明“button控件点击了”这种编程概念。写成代码或许就是类似这样:
public partial class WebUserControl : System.Web.UI.UserControl
{
public string 名称
{
get
{
EnsureChildControls();
return TextBox1.Text;
}
}

public EventHandler<EventArgs> 注册;

protected void Button1_Click(object sender, EventArgs e)
{
if (注册 != null)
注册(this, EventArgs.Empty);
}
}


尽管用户控件中点击Button1事件时是要通知宿主想去注册,但是用户控件只是用事件“注册”来通知,而并不暴露内部的什么Button1或者别的什么实现机制。
wuyq11 2010-02-21
  • 打赏
  • 举报
回复
Page p = this.Parent.Page;
Type pageType = p.GetType();
//父页面的方法名
MethodInfo mi = pageType.GetMethod("");
mi.Invoke(p, new object[] { "参数1","参数2" });
调用用户控件中方法委托实现
wbcn 2010-02-21
  • 打赏
  • 举报
回复
这个可以,呵呵~
protected void Button1_Click(object sender, EventArgs e)
{

Label lbl = this.Parent.Page.FindControl("Label1") as Label;
lbl.Text = "hello!";
}
  • 打赏
  • 举报
回复
你也可以这样来测试:

用户控件可以随时修改自己的机制,例如把所谓的button改为一个flash动画上的游戏“射击”事件。作为一个持久化可维护的设计,用户控件定义接口时,定义它的属性、事件。至于用户控件内部是怎么实现的,不要去想当然。

有时候,一个懂行的产品经理会为另外开发一个最简单的测试用用户控件,故意跟最终的用户控件的内部实现方法不同,然后用来测试那些低级开发人员提交的程序。尽早开发一个测试用的mock组件,这是协调一个项目开发过程的最好办法。
小_虎 2010-02-21
  • 打赏
  • 举报
回复
应该委托可以。
小_虎 2010-02-21
  • 打赏
  • 举报
回复
我要收藏这个问题。
  • 打赏
  • 举报
回复
搞清楚什么是职责,是第一位的!而职责,就是分清楚谁是服务,谁是客户。

页面使用用户控件,那么用户控件就是服务,因为控件是要被放在各种各样的页面中的(这年头该重视“被xx”这个语法了);而页面就是把各种用户控件粘贴在一起的粘合剂——客户。因此,页面应该知道控件的接口,而控件不应该想当然地假设它的宿主的接口。

回到你这个问题,正规的观念就是:页面可以针对控件的接口而操作,控件只应该用事件来通知页面。
wohello 2010-02-21
  • 打赏
  • 举报
回复
引用 3 楼 chen_ya_ping 的回复:
引用楼主 wohello 的回复:在页面中包含label控件和用户控件,用户控件中包含一个button 点击用户控件中button后,改变页面label控件的Text值 请问要实现这样的功能,代码应该如何编写啊? 谢谢啦

在usercontrol控件中button事件中
private void button1_click()
{
  label l= this.parent.findcontrol("label1") as Label;
l.text=“你要改变的值";
}


提示Object reference not set to an instance of an object. 错误!
chen_ya_ping 2010-02-21
  • 打赏
  • 举报
回复
引用楼主 wohello 的回复:
在页面中包含label控件和用户控件,用户控件中包含一个button
点击用户控件中button后,改变页面label控件的Text值
请问要实现这样的功能,代码应该如何编写啊?

谢谢啦


在usercontrol控件中button事件中
private void button1_click()
{
label l= this.parent.findcontrol("label1") as Label;
l.text=“你要改变的值";
}
yaazz 2010-02-21
  • 打赏
  • 举报
回复
在用户控件中添加事件
加载更多回复(1)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧