vs.net2003,自定义web控件问题?在线等,当场结分。谢谢各位ggjj

bluejs 2004-03-27 08:45:04
编写asp.net的程序中,在vs.net 2003中自定义一个web控件,button,想要将他和一个义事件绑定,为何不行?请大家帮帮忙。为什么我的btn按钮的click事件没有反应?
程序:
<DefaultProperty("text"), ToolboxData("<{0}:GenEditAdd runat=server></{0}:GenEditAdd>")> Public Class GenEditAdd
Inherits System.Web.UI.WebControls.WebControl

(1) '重调用定义一个动态的按钮btn
Protected Overrides Sub CreateChildControls()
Dim btn As New Button
btn.Text = "测试"
Me.Controls.Add(btn)
AddHandler btn.Click, AddressOf test_click '将按钮与事件连接
End Sub

(2)'定义按钮事件
Private Sub test_click(ByVal sender As [Object], ByVal e As EventArgs)
Me.Controls.Add(New LiteralControl("<br><br>btn按钮事件成功"))
End Sub
end class

实际运行中(2)的结果不能显示 ,更不就不能调用。为什么?

但是http://chs.gotdotnet.com/quickstart/aspplus/default.aspx 网页中的Windows 窗体-》在复合控件中处理事件,中使用addHandler和Addressof就可以啊。是不是vs.net2003的问题啊?
...全文
24 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluejs 2004-03-28
  • 打赏
  • 举报
回复
saucer你好:
没想到你能给我回答。我在网上早闻你的大名了。问题得到解决,谢谢
(1)make sure your class have a namespace
我是从vs.net2003中"创建控件库"->"创建web控件",所以namespace在程序中不需要加入,vs.net会根据"控件库的名称"自动生成namespace
(2)我根据你的提示在vs.net2003自动生成的代码中加入"Implements INamingContainer",
调试成功(自动生成的代码中不含有"Implements INamingContainer")。真是太高兴了!非常感谢。只是原理为什么我不是很清楚,能提示一下吗?
(3)在添加"Implements INamingContainer"后,如果我想取得动态创建的控件,在没添加"Implements INamingContainer"前是如下:
dim ctr as textbox =controls(1) '取得动态生成的第一个控件'
Me.EnsureChildControls()
ctr.text="修改后的内容" '对动态生成的第一个控件修改text内容
现在程序无法识别 controls(1) ,是不是要在他前面加上什么前缀?能说明一下吗?
(4)由于二楼sjzwinfor(我喜欢c#) 也给我回答了问题,所以我想给他加点分,剩下的给你。虽然我知道你这样的高手回答问题不是为了分值,可是我只能这样表达我的谢意了
再次谢谢:)
bluejs 2004-03-28
  • 打赏
  • 举报
回复
(1)在浏览器里比较一下添加“Implements INamingContainer”前后的HTML编码
嗯,的确是的加上“Implements INamingContainer”和不加name的命名的确不一样。
呵呵,明白了,谢谢。

(2)我确实是controls(1),不是controls(0)。提示出错的原因是:
异常详细信息: System.InvalidCastException: 指定的转换无效。
在程序:
行 22: Dim ctr As TextBox = Me.Controls(1) 处

(3)解决方法:按照你的提示:我将controls(1)改成controls(0)就可以了。在原先程序没有加“Implements INamingContainer”时,用controls(1)是正确的。添加“Implements INamingContainer”后就必须改成controls(0)了,呵呵,不知道为什么

程序是如下
<DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class WebCustomControl1
Inherits System.Web.UI.WebControls.WebControl
Implements INamingContainer

'取得第一个控件,应该是动态txt控件吧?
<Bindable(True), Category("Appearance"), DefaultValue("")> Property [Text]() As String
Get
Dim ctr As TextBox = Me.Controls(1)’*****此处会出错要改成controls(0)
Me.EnsureChildControls()
Return ctr.Text
End Get

Set(ByVal Value As String)
Dim ctr As TextBox = Me.Controls(1)’*****此处会出错要改成controls(0)
Me.EnsureChildControls()
ctr.Text = Value
End Set
End Property

'动态生成自控件textbox 类型的txt 和button类型的btn
Protected Overrides Sub CreateChildControls()
Dim txt As New TextBox
txt.Text = "测试"
Me.Controls.Add(txt)
Dim btn As New Button
btn.Text = "test"
Me.Controls.Add(btn)
AddHandler btn.Click, AddressOf btn_click
End Sub

’定义btn_click事件
Private Sub btn_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Text = "第二次测试"
End Sub
saucer 2004-03-28
  • 打赏
  • 举报
回复
在浏览器里比较一下添加“Implements INamingContainer”前后的HTML编码

一个按钮是否触发,后端系统是通过Request.Form里的name/value对来决定的。添加INamingContainer,就给你的控件添加了一个名字空间,这样系统就知道是哪个控件触发的

(3)应该是类似的,只要你的控件确实是生成了,你确信是controls(1)么?不是controls(0)?
saucer 2004-03-27
  • 打赏
  • 举报
回复
it has nothing to do with vs.net2003, try

<DefaultProperty("text"), ToolboxData("<{0}:GenEditAdd runat=server></{0}:GenEditAdd>")> Public Class GenEditAdd
Inherits System.Web.UI.WebControls.WebControl
Implements INamingContainer
...

make sure your class have a namespace
bluejs 2004-03-27
  • 打赏
  • 举报
回复
vs.net2003以前的版本是不是和现在编写程序的思路不一样啊。
真难学
010258 2004-03-27
  • 打赏
  • 举报
回复
关注
bluejs 2004-03-27
  • 打赏
  • 举报
回复
哦,不是很明白。不过很谢谢。
sjzwinfor 2004-03-27
  • 打赏
  • 举报
回复
在c#中是这样实现的,并且是可用的,不知vb如何实现
this.toolBar1.Click += new System.EventHandler(this.menuItem7_Click);

62,046

社区成员

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

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

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

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