各位高手帮解释一下?急

hawise 2003-04-14 04:24:34
下面的代码,错在哪?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace testcontrol
{
/// <summary>
/// WebCustomControl1 的摘要说明。
/// </summary>
public delegate void myclick(object sender,System.EventArgs e);
public class WebCustomControl1 : System.Web.UI.WebControls.WebControl,INamingContainer
{

private string text;
public event myclick onclick;

[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return text;
}

set
{
text = value;
}
}

/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
addcontrol();
base.Render(output);
}

private void addcontrol()
{
Button b=new Button();
b.Text="click me";
b.ID="test1";
b.Click+=new myclick(this.bclick);
this.Controls.Add(b);
}

public void bclick(object sender,System.EventArgs e)
{
if(this.onclick!=null)
{
this.onclick(this,e);
}
}
}
}
...全文
55 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuohs 2003-04-14
  • 打赏
  • 举报
回复
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcwlkDelegatesTutorial.htm
dragontt 2003-04-14
  • 打赏
  • 举报
回复
第一,你的deleggate声明没有意义
和System.EventHander的委派声明一样,直接用就可以了


public event myclick onclick;
改为
public event System.EventHander click;

private void addcontrol()
{
Button b=new Button();
b.Text="click me";
b.ID="test1";
b.Click+=new myclick(this.bclick);
this.Controls.Add(b);
}
改为:
private void addcontrol()
{
Button b=new Button();
b.Text="click me";
b.ID="test1";
b.Click+=new System.EventHander(this.bclick);
this.Controls.Add(b);
}

public void bclick(object sender,System.EventArgs e)
{
if(this.onclick!=null)
{
this.onclick(this,e);
}
}

改为

public void bclick(object sender,System.EventArgs e)
{
if(this.click!=null)
{
this.click(this,e);
}
}

最后,你在使用你的control时,要遍写了click事件,你的button点击后,才会有响应
timmy3310 2003-04-14
  • 打赏
  • 举报
回复
public delegate void myclick(object sender,System.EventArgs e);
这一句不要

然后把你的代码中的myclick全部替换为EventHandler

这个delegate已经在System.Web中定义了,你不需要再定义一次

而且Button的Click事件只能增加EventHandler的代理

另外,你的目的不是很明确?你干吗要自己定义一个事件?你根本没有在你的代码的任何地方引发你的事件

还有,创建对象的代码(你的addControls方法)最好在重载的CreateChildControl中执行,不要在Render中执行
hawise 2003-04-14
  • 打赏
  • 举报
回复
那麻烦大家解释一下delegate以及它的用法?
hawise 2003-04-14
  • 打赏
  • 举报
回复
按钮是肯定有的。
我是想试试运用代理,触发自定义的事件。
zhuohs 2003-04-14
  • 打赏
  • 举报
回复
借问一下,我按照你的方法运行了下,怎么连那个按钮都显示不出来呢?说说你的真实的目的吧,你是想通过程序代码添加一个按钮b,在触发b的Click事件吗?
jonsonzxw 2003-04-14
  • 打赏
  • 举报
回复
你是如何引发事件的
jonsonzxw 2003-04-14
  • 打赏
  • 举报
回复
好象引发事件的代码有问题
hawise 2003-04-14
  • 打赏
  • 举报
回复
对了,设置断点,连bclick函数都不执行。为什么?
zhuohs 2003-04-14
  • 打赏
  • 举报
回复
b.Click+=new System.EventHandle(this.bclick);
怎么没有反映呢?
zhuohs 2003-04-14
  • 打赏
  • 举报
回复
你说清楚点,有什么错?
hawise 2003-04-14
  • 打赏
  • 举报
回复
无法将myclick隐式转化为System.EventHandle
如果改成b.click+=new System.EventHandle则没有任何反映。
根本就不会执行bclick函数
zwztu 2003-04-14
  • 打赏
  • 举报
回复
报的什么错?

62,266

社区成员

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

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

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

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