动态创建控件时的奇葩事情,不明白,望指教!

问题描述

做了一个动态创建Button的用户控件,测试时发现按钮可以正常生成,但是绑定在其上的Click事件却无法触发。折腾了很久,发现只要我给Button的ID赋值,那么Click事件就无法触发,不知道是什么问题,望指教。publicpartialclassOperatorButton:System.Web.UI.UserControl{privateList<OperatorCommand>m_OperatorCommand=newList<OperatorCommand>();publiceventEventHandler<OperatorButtonEventArgs>OperatorClick;privatevoidLoadButton(){m_OperatorCommand.Add(OperatorCommand.New);m_OperatorCommand.Add(OperatorCommand.Update);m_OperatorCommand.Add(OperatorCommand.Delete);CreateAuthorizedOperator();}protectedvoidPage_Load(objectsender,EventArgse){LoadButton();}privatevoidCreateAuthorizedOperator(){stringurl=this.Page.Request.Url.AbsolutePath;if(m_OperatorCommand.Count>0)this.PlaceHolder1.Controls.Clear();foreach(OperatorCommandcmdinm_OperatorCommand){objectobj=null;OperatorCommandnewCmd=cmd;obj=CreateButton(Guid.NewGuid().ToString(),cmd.ToString());if(objisIButtonControl){((IButtonControl)obj).Click+=(sender,e)=>{OnOperatorClick(sender,newCmd);};}Literalspace=newLiteral();space.Text="";if(this.PlaceHolder1.Controls.Count>0)this.PlaceHolder1.Controls.Add(space);this.PlaceHolder1.Controls.Add((Control)obj);}}publicvoidOnOperatorClick(objectsender,OperatorCommandcmd){if(OperatorClick!=null)OperatorClick(sender,newOperatorButtonEventArgs(cmd));}protectedvirtualobjectCreateButton(stringid,stringtext){Buttonbutton=newButton();//怪异之处:如果对ID进行了赋值,那么button的Click时间无法触发。如果不赋值就可以触发,不明白!!!!//button.ID=Guid.NewGuid().ToString();button.Text=text;button.CommandArgument=text;returnbutton;}}publicclassOperatorButtonEventArgs:EventArgs{publicOperatorButtonEventArgs(OperatorCommandcmd){Command=cmd;}publicOperatorCommandCommand{get;set;}}

解决方案

本帖最后由 PCI_E 于 2015-04-17 17:23:34 编辑

时间: 2024-09-20 18:54:22

动态创建控件时的奇葩事情,不明白,望指教!的相关文章

在.NET上如何根据字符串动态创建控件

创建|动态|控件|字符串   在.Net上用字符串动态创建控件是通过反射来实现. 首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例. 这里需要注意这个字符串的语法,根据msdn的解释: 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符.返回类型.参数类型.标记和非托管调用约定.这是二进制比较. 对于反射,属性和事件按名称和签名隐藏.如果基类中有同时带 get 访问器和 set 访问器的属性,但派生类中仅有 get 访问器,则派生类属性隐藏基类属性,并且

ASP.NET动态创建控件之绝境求生

在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵! 要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone! 提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常! 大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才

MFC中动态创建控件以及事件响应实现方法_C 语言

本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()

泛型-c# 动态创建控件 及触发事件 即插即用。

问题描述 c# 动态创建控件 及触发事件 即插即用. 各大大好,初来驾到,请大家多多关照,问题是这样的.需求 :需要动态添加控件.然后需要项目做出来后要实现"即插即用"的特点.(即插即用:我们要是更新一个功能,用户只要更新这个控件就可以直接使用,而不用更新整个客服端)问题 :知道要用泛型来写,但是看了一天了,不知道如何下手,现已写了如下代码:using System;using System.Collections.Generic;using System.Linq;using Sys

动态创建控件支持事件响应并可保存与读取

VC++6.0中创建动态控件是比较偏离基础的知识,也有一定的难度.它的完整功能是要动态创建控件后再动态响应控件中的事件,两者全部做到才算完整. 这里我将展示一个完整的动态控件示例,它可以动态创建控件,然后再动态响应控件事件,并可以保存控件信息至ini配置文件,然后再根据ini文件读取出控件信息来动态创建控件.相信它能够解决你在动态控件中所遇到的许多问题. 当然,动态控件的方法有许多种,我展示的只是给我认为较好的. 这里以VC++6.0创建对话框工程为例,添加菜单,分别添加子项按钮,文本框,标签.

dll动态库-MFC 动态创建控件不响应消息

问题描述 MFC 动态创建控件不响应消息 按照工程的要求,我必须建立一个类(动态链接库中),这个类是从CWnd派生的,里面的控件全部要求动态生成,而我这个类会作为一个Dialog的成员变量. 目前动态创建控件可以实现,但是控件却不响应消息,我认为是消息只在Dialog中,没法传到其成员变量中,不知道是不是这个原因--请大神帮忙! 我做了一个很简单的程序,请大神帮忙分析一下,灰常灰常感谢~ 解决方案 // MFCApplication1Dlg.h : 头文件 protected: CTestWnd

请问lotus如何动态创建控件

问题描述 在开发的过程中,小弟有几个疑问,希望大家能帮帮:1.在lotus里(C/S)能否动态创建控件,如按纽,热点连接等,还要能点击后传值给相应的表单,在另一个表单里能获取传值,像b/s里的连接一样2.点击表单,弹出自定义的子表单,在子表单里填写相应的内容,然后传值到父表单里.以上两个问题,希望高手能帮忙解答下,最好有代码示例,谢谢 解决方案 解决方案二:怎么没人,很急啊解决方案三:我没实现过这样的.为什么会有这样的需求呢?解决方案四:因为我们现在有个这样的需求,假如某个员工的档案,有几个表,

c# tablelayoutpanel动态添加控件时Controls.Add(控件对象,0,0) 多次后不会在第一行添加了

问题描述 如题c#tablelayoutpanel动态添加控件时Controls.Add(控件对象,0,0)多次后不会在第一行添加了后面新增的都会在第二行第三行 解决方案

如何实现 ABAP 动态创建控件?

问题描述 想做个联立表搜索的程序,想问下如何实现动态创建控件?类似SE16的,不过那个guifunction不是很懂,想问下有人了解么?