动态控件
VB动态添加控件的简单方法演示教学

VB动态添加控件并对其进行拖放操作改变位置用Controls.Add添加控件Dim WithEvents mypic As PictureBoxPrivate Sub Command1_Click()Set mypic = Controls.Add("VB.PictureBox", "mypic")mypic.Left = 50mypic.Top = 50mypic.Visible = TrueEnd Sub至于拖放操作,在程序中设置好mypic控件的有关属性后,处理mypic的有关事件即可注意:如果是控件数组的话,建议采用:load 控件数组名(索引) 的方法添加控件'可先手工画一个控件,Visable设置为False,Index设置为0'若需要多个就用load object(index)来加载,并把它们的visable设置为true;不需要多个就真接把原有的那个的visable设成显示就行了。
Private Declare Function ReleaseCapture Lib "user32" () As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ByVal hwnd As Long, ByVal wMsg As Long, _ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_MouseDown(Index As Integer, Button As Integer, _Shift As Integer, X As Single, Y As Single)If Button = 1 ThenReleaseCapture '移动控件SendMessage Command1(Index).hwnd, &HA1, 2, 0&End IfEnd SubPrivate Sub Form_Click()On Error GoTo endsubFor i = 1 To 5Load Command1(i) '生成控件Command1(i).Top = Command1(i - 1).TopCommand1(i).Left = Command1(i - 1).Left + Command1(i -1).WidthCommand1(i).Visible = TrueNextExit SubEnd Sub‘例如:添加一个commandbuttonPrivate Sub Form_Load()Form1.Controls.Add "mandButton", "cmdOk", Picture1 With Form1!cmdOk.Visible = True.Width = 500.Caption = "确认(&Y)"End WithEnd Sub‘删除控件Form1.Controls.Remove "ctl1" ctl1为控件名。
[整理版]在易语言中动态创建控件及响应事件
![[整理版]在易语言中动态创建控件及响应事件](https://img.taocdn.com/s3/m/da453a390166f5335a8102d276a20029bd6463e5.png)
在易语言中动态创建控件及响应事件〖例程说明〗在程序运行时动态创建控件?的确有用,但在易语言中是怎样做的?不太复杂,不外是两步:根据同类原型控件样本复制一个新的同类控件;响应动态生成控件的事件。
而动态复制控件样本又分三步:用“复制窗口组件”命令复制一个新的同类控件样本;安排好新创建控件的位置,并设置该控件可视为真;给新控件加上标记以便让程序识别是哪个新创建的控件。
其中需要注意两个前提事项:先要在编辑程序时,绘制一个提供在运行中复制的同类控件(本例叫“原型框”);用控件数组定义各个新控件以方便管理。
本例程示范最简单地创建控件并响应事件。
示范在窗口中创建一个横排的编辑框列,每点一下按钮就在排中添加一个新的编辑框。
当双击某个新编辑框时可以识别响应的是哪个新编辑框的“编辑框被双击”事件,从而决定由哪个新编辑框回应双击事件。
〖例程说明〗如下:窗口程序集:窗口程序集1程序集变量:新框数据类型:编辑框数组:0 备注:新的编辑框程序集变量:框号数据类型:整数型══════════════════════════════子程序:_按钮1_被单击框号=框号+1重定义数组(新框, 真, 框号)复制窗口组件(原型框, 新框[框号])新框[框号].移动(原型框.左边+原型框.宽度×框号, 原型框.顶边, 原型框.宽度, 原型框.高度)新框[框号].内容=“按钮”+到文本(框号)新框[框号].可视=真新框[框号].标记=到文本(框号)══════════════════════════════子程序:_原型框_被双击返回值类型:逻辑型参数:横向位置数据类型:整数型参数:纵向位置数据类型:整数型参数:功能键状态数据类型:整数型局部变量:框编号数据类型:整数型局部变量:事件框数据类型:编辑框局部变量:框编号1 数据类型:整数型事件框=取事件组件()框编号=到数值(事件框.标记)信息框(“这是第”+到文本(框编号) +“个新编辑框”, 0, )〖总结引申〗怎样才能使新创建的控件响应事件呢?其中关键是给复制好的新控件加上唯一的标记文本,然后在发生事件后用“取事件组件”命令获取事件发生的控件,并回应该事件。
在 VB 中动态添加和删除控件

Wi t h e x t C t l ‘ 为控T u e’ r He i g h t=2 0 0 0
.
.
、 矾d t h=2 0 0 0
. .
Ca p t i o n-I ’ 动态按钮 ”
Wi d nl =2 0 0 0 To p= 1 0 0 0 L e f t =1 0 0 0
置其属性 ,也就是说控件在设计 时已经存在 , 在程序运行过程 中只 能改变其属性 。那么 能不 能在程序运行过程 中添加 或删 除未 引用 的控件 呢? 回答是肯定 的,在程序 运行 过程 中即可以 添加所需要 的控件 , 当用完时就可删除该控件 ,
En dW i t h
.
E n d Su b
F o r m1 . C o n t r o l s . R e mo v e ” b t n O b j 该控件 的名 称为 b t n Ob j
E n d S u b
下:
总 之 ,通 过 Ad d方 法 和 R e mo v e方 法 可
以动 态 的添加 和删 除控件 ,使在 编程 时对 控
用是在创建程序界面时添加 ,然后根据需要设
性
Wi t h F o r ml ! c m d O b j 1 ‘ 为控 件设 置属
Vi s i b l e= T r u e
Ad d ( ” ms d a ag t r i d l i b . d ta a g r i d ” , _” d a ag t r i d 1 ” )
_
个控件并返 回一个对该控件 的引用 。语法如
o b j e c t . Ad d( P r o g l D, n a me , c o n t a i n e r ) 0b j e c t必 需的。一 个对象表达 式 P r o g I D 必 需 的。 一 个标 识 控 件 的 字 符
C#动态添加控件(数组控件)

C#动态添加控件(数组控件)中秋吃了⽉饼,还是想把问题解决,所以研究了⼀个下午.研究参考了好多⽹上的资料如何动态添加数组控件,终于可以成功实现了,先在设计页⾯上添加⼀个label控件,然后就在对应的代码输⼊:如button_click 事件中Label [] mypic_inf=new Label [10];int i= 1while (reader.Read()) //{ if (i == 1){mypic_inf[1] = Label1;}else{ mypic_inf[i] = new Label();mypic_inf[i].ID = "Label" + i;this.Controls.Add(mypic_inf[i]);mypic_inf[i].Height = 100;mypic_inf[i].Width = 150;}mypic_inf[i].Text="ok"+i; //这⾥是测试⽤,其实可以有很⼴泛的⽤途,慢慢研究吧i++;}然⽽,在当天晚上经过再三修改的测试,发现了问题,就是因为添加了⼀个label控件,当你要查询或需要该数据的时候,它能正确\正常,但当你要查询,或者不需要该控件出现的时候,它就驻留在内存中,不能正确显⽰,最后还是不要添加⼀个label控件为好,就⽤代码ok了,如下Label [] mypic_inf=new Label [10];int i= 1while (reader.Read()) //{mypic_inf[i] = new Label();mypic_inf[i].ID = "Label" + i;this.Controls.Add(mypic_inf[i]);mypic_inf[i].Height = 100;mypic_inf[i].Width = 150;mypic_inf[i].Text="ok"+i; //这⾥是测试应⽤,其实可以有很⼴泛的⽤途,慢慢研究吧i++;}reader.close;connetion.close;最后不要忘记关闭对象和数据连接哦。
mfc动态创建EDIT控件

mfc动态创建EDIT控件知识点:CWnd::CreateCWnd::CreateExSpy++⼯具动态创建控件⼀、 CWnd::Create 参数virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);dwExStyle扩展样式0x204lpszClassName类名未知的话可以⽤spy++获取lpszWindowName窗⼝名dwStyle风格rect矩形pParentWnd⽗窗⼝nID窗⼝IDpContext窗⼝上下⽂环境⼆、代码测试:int CDialog_Dynamics_Create::OnInitDialog(void){CDialog::OnInitDialog();// TODO: 在此添加控件通知处理程序代码// myedt.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,0,100,50),this,100081);//myedt.CWnd::Create(L"Edit",L"myedit",0x50010080,CRect(0,0,100,50),this,100081);//myedt.CWnd::CreateEx(0x204,L"Edit",L"myedit",0x50010080,CRect(0,0,100,50),this,100081);myedt.CreateEx(WS_EX_CLIENTEDGE,L"Edit",L"myedit",WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,0,100,50),this,100081);myedt2.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,60,100,110),this,100082);return0;}dwExStyle扩展窗⼝风格:•WS_EX_ACCEPTFILES 指明⽤这个风格创建的窗⼝能够接受拖放⽂件。
动态生成GridView控件

可 以 看 出 ,为 了 提 高 页 面 展 示 的 灵 活 性 , 实 现 动 态 生 成
G i iw控 件 。应该 采 用 编 程 的方 式 定 义 控 件 列 、动 态获 取 数 rVe d 据源对象的方式。
3 编 程
X ML作 为 一 种 成 熟 的 数 据 存 储 和 交 换 的标 准 格 式 ,它 的
B u d il hs il lo n Fed t iFed = n w o n Fed ; e B u d il0
t iFed. t Fed = ”a e : hs il Daa il nm “
Sh W = " u " O t e/ r >
tiF I.e d re t 姓 名 “ h idH a eT × =” se :
< s : o n F l D tFe a p B u d i d aa il "a " e d re t “ e d= n me H a eT x = 姓名 “
/ > < C lmR > / ou S ( ) 以 编 程 的方 式 定 义 列 。将 A t e ea C lm s 性 3 uo n r e ou n 属 G t 值 设 为 F l ,在 . p . 源 文 件 中实 例 化 数 据 字 段 对 象 ,并 把 ae s a xS s C
性 值 为 Tu ,控 件 能够 自动 生 成 列 ,以包 含来 自数 据源 的序 的 设 计 带 来 巨 大 的 灵 活 性 。 首 先 建 立 X ML文 件 , 用 其 存 储 数 据 库 中 的 表 名 和 该 表 所 有 的 字 段 名 ,
供 手段 。
关 键 词 : Gr Viw;XM L:AS NET 20 i e d P. .
C#动态生成控件以及添加事件处理
C#动态⽣成控件以及添加事件处理有时候需要在程序运⾏到⼀定时候或者某个事件之后需要动态⽣成控件在C#下⼀般⽅式是: private Button Db=new Button() ; ="Dy_Button" //设定名称 Db.Location=new Point(100,200);//设定位置 。
//其他属性设置 //这⾥添加消息处理 。
this.Controls.Add (Db);//添加到控件组中 这样就完成了动态⽣成但是需要给控件添加消息处理事件 那么现在就需要在⽣成控件添加到控件组前增加如下语句:DPB.MouseClick += new EventHandler(this.pictureBox_MouseClick); 现在编写这个消息处理的函数pictureBox_Click() private void pictureBox_MouseClick(object sender,EventArgs e) { MessageBox.Show("click"); } 这样完成了事件处理的添加 ⾸先,创建⼀个全局变量"i "⽤来区分各个新的按钮:private int i=0; 然后在已有的按钮中添加⽅法如下: private void button1_Click(object sender, System.EventArgs e) { i++; Button b = new Button();//创建⼀个新的按钮 ="b"+i;//这是我⽤来区别各个按钮的办法 System.Drawing.Point p = new Point(12,13+i*30);//创建⼀个坐标,⽤来给新的按钮定位 b.Location = p;//把按钮的位置与刚创建的坐标绑定在⼀起 panel1.Controls.Add(b);//向panel中添加此按钮 b.Click += new System.EventHandler(btn_click);//将按钮的⽅法绑定到按钮的单击事件中b.Click是按钮的单击事件 }完成以上步骤就已经可以进⾏动态按钮的创建下⾯我们来讲如何对新建的按钮添加对应的事件⽅法btn_click(): private void btn_click(object sender, System.EventArgs e) { Button b1 = (Button)sender;//将触发此事 完成以上步骤就已经可以进⾏动态按钮的创建 下⾯我们来讲如何对新建的按钮添加对应的事件⽅法btn_click(): private void btn_click(object sender, System.EventArgs e) { Button b1 = (Button)sender;//将触发此事件的对象转换为该Button对象 MessageBox.Show(""+); } ⾄此就已经完成了动态创建按钮和事件 为控件动态添加事件 实现的功能是在⽹页上的Panel中动态添加⼀个Button,并为这个Button写⼀个单击事件。
MFC动态控件添加消息响应
MFC动态控件添加消息响应MFC动态创建控件的消息处理前些天有⼈在论坛⾥问在动态创建TreeCtrl后怎么响应消息于是便写了⼀点⾃⼰的⼼得现整理如下。
本例在MFC动态创建控件的消息处理前些天有⼈在论坛⾥问在动态创建TreeCtrl后怎么响应消息于是便写了⼀点⾃⼰的⼼得现整理如下。
本例在view中动态创建⼀个ListCtrl并响应其NM_CLICK消息先写出动态创建的代码: 新建⼀SDI⼯程给view加上⼀个成员变量:CListCtrl m_list 在view的OnCreate中创建它:ifm_list.CreateWS_BORDER WS_CHILD WS_VISIBLELVS_ICON LVS_AUTOARRANGELVS_EDITLABELSCRect1010310210thisID_LISTCTRLTRACE0Failed to create ListCtrl windownreturn -1//添加⼀些项CString strforint i0i10istr.Formatitemdim_list.InsertItemistr 其中的ID_LISTCTRL是这个控件的ID当然你可以直接⽤数值来表⽰但为了程序清淅还是定义⼀个常量的好在主菜单View-Resource Symbols弹出的对话框中New按钮在Name下⾯输⼊ID_LISTCTRL. 创建完毕编译链接后就可以运⾏了但你怎么它都没反应当然因为我们还没写消息处理的代码。
通常做法是⼿动写消息处理函数及消息映射⾄少得三步1在头⽂件中定义消息处理函数的原型2在cpp中实现这个函数3在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间写上消息映射。
如果是单单处理⼀个消息的话那还可以忍受消息⼀多的话不但⿇烦还容易出错。
所以我采取下⾯的⽅法: 1.打开about对话框资源放⼊⼀个ListCtrl控件到对话框中并将其ID设为ID_LISTCTRL. 2.CtrlW把Class Name由原来的CAboutDlg改为CxxxView在左边的Object IDS中选择ID_LISTCTRL这时右边会出现相应的通知消息这时就可以跟平常⼀样双击添加消息映射了. 嘿嘿是不是跟在对话框⾥响应控件的消息⼀样很⽅便呀. 有⼀点需要注意只有当打开你加⼊控件的那个对话框资源编辑器的时候按CtrlW时Class Wizard中才会出现那个ID_LISTCTRL还有发⾏时注意把对话框上的listctrl控件删掉.。
动态组件的使用方法
动态组件的使用方法动态组件是一种在Vue.js中常用的技术,它允许我们根据不同的数据和条件,动态地渲染组件,从而实现复杂的交互功能和用户界面。
在本文中,我们将详细介绍动态组件的使用方法,包括以下几个方面:1.使用<component>元素2.使用is特性3.使用v-bind动态组件4.使用v-on动态组件使用<component>元素Vue.js提供了一个名为<component>的元素,它允许我们动态地渲染组件。
如下所示:<component :is="currentComponent"></component>在上面的代码中,我们使用:is特性绑定了一个变量currentComponent,这个变量决定了要渲染的组件。
当currentComponent的值发生变化时,对应的组件就会被渲染出来。
使用is特性除了在<component>元素中使用:is特性进行动态绑定外,我们还可以直接在组件标签上使用is特性来实现动态组件的效果,如下所示:<my-component is="currentComponent"></my-component>在上面的代码中,<my-component>是一个自定义组件,通过使用is特性绑定了一个变量currentComponent,从而动态渲染不同的组件。
使用v-bind动态组件除了使用is特性外,我们还可以使用v-bind指令来动态地传递组件的属性和参数。
如下所示:<component :is="currentComponent" v-bind="componentProps"></component>在上面的代码中,v-bind指令将整个componentProps对象中的属性和值一起传递给了被渲染的组件。
机器视觉之VisionPro动态创建控件
VisionPro动态创建控件有的时候可能需要在程序中动态创建控件,VisionPro实例中提供了一例动态创建Blob控件的方法。
当然,动态创建过多的控件会极大的消耗系统的资源,建议少用。
用完之后在不再需要时要及时销毁,以回收资源。
1)声明全局变量:Private mBlobTool as CogBolobToolPrivate mBlobEdit as CogBlobEdit2) 创建:由于创建过程需要占用资源,所以需要改变鼠标垫状态。
Me.Cursor=Cursors.WaitCursor构建Blob Toolif mBlobTool is nothing then mBlobTool=new CogBlobToolmBlobEdit=new CogBlobEdit开始初始化Edit控件Ctype(mBlobEdit,ponentModel.ISupportInitialize).BeginInit()原始界面mBlobEdit.Enable=TruemBlobEdit.Location=New System.Drawing.Point(0,0)="CogBlobEdit1"mBlobEdit.Size=new System.Drawing.Size(800,450)mBlobEdit.TabIndex=0Me.tabControl1.SelectedIndex=0Me.BlobTabPage.Controls.Add(mBlobEdit)Ctype(mBlobEdit,ponentModel.ISupportInitialize).EndInit()初始化结束时向BlobEdit控件指定ToolmBlobEdit.Subject=mBlobTool改变鼠标为默认形式Me.Cursor=Cursors.Default添加控件之后界面3)窗体关闭时或其它时候需要回收资源:Me.Cursor=Cursors.WaitCursorMe.BlobTabPage.Controls.Remove(mBlobEdit)mBlobEdit.Dispose()Me.Cursor=Cursor.Default由于在自动创建时控件的AutoCreateTool会被忽略,因此用户必须创建Tool,并把控件指定到此Tool。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中动态增加和删除用户控件作者:shanliwa 出处:csdn 2007-8-30 9:10:05 阅读 1092 次我们在 项目的开发中,需要页面中动态添加和删除多个用户控件。
开发环境为Microsoft Visual Studio .NET 2003, 开发语言为C#,并提供源代码下载。
通过一个例子来演示:我们通过网页来动态创建表和字段时,一次性需要添加多个字段,而字段还有其属性。
那么可以通过创建一个用户控件,里面包含多个文本控件或者其他控件来存放一个字段的名称和其多个属性值。
然后,在网页中,根据需要创建字段个数的需要,来多次动态加载相等数量的用户控件。
既然能动态加载用户控件,那么加载结束后如果发现某个或几个字段多余,那就需要删除多余的用户控件.在删除时,应该给出提示是否删除。
那么具体操作是:点击"增加"按钮,页面增加一个用户控件,再次点击"增加"按钮又增加一个控件用户。
每个用户控件上有一个删除按钮,点击任何用户控件上的“删除”按钮就删除掉该用户控件而不影响其他已存在的用户控件。
我们先提到四个基本概念,他们在动态加载用户控件中需要用到的知识。
什么是用户控件?用户控件就是已经被转换为包含一个或者多个控件的 页面. 使用用户控件可以很方便的在多个 页面中使用相同的内容和编程逻辑。
[1]什么是PlaceHolder 控件?通常不将控件直接添加到页面的Controls 集合中。
因为我们希望将控件添加到页面的指定的位置。
框架中就包含PlaceHolder 控件,它用来作为其他控件的容器,我们将控件添加其中,这样我们只需要对PlaceHolder 控件定位就可以实现对其他控件的定位。
什么是ViewState?ViewState 是.Net 中提出的状态保存的一种新途径,它是服务器控件状态保存的基础。
通俗的说,就是点击页面的按钮(WebControls.Button类型)提交页面后,页面会被重新加载,那么我们需要保存提交前页面中变量的值,在页面被重新加载后可以使用这些被保存变量的值。
在本例中,当我们删除一个控件时,页面会被重新加载,而我们需要删除前用户在其他控件输入的值仍然存在,那么我们就需要ViewState 来保存这些值。
如果不保存这些值,页面会被重新加载后其他控件输入的值就会被清除,不符合我们的需要。
isPostBack是什么意思?判断页面是否首次被加载,是返回false, 不是true。
通过isPostBack 和ViewState 一起就可以在Page_Load 中完成页面状态的保存。
完成这个例子的步骤:(1) 新建一个 的项目,(有点废话,但是没有项目是无法完成这个例子的)。
创建一个后缀名为aspx 的页面,我们需要在它里面来动态添加和删除用户控件(假设该页面的名称为TableDataField.aspx)。
创建一个后缀名为ascx 的用户控件,(假设该用户控件的名称为WebUserControlCls.ascx),我们需要在它里面添加我们需要的多个服务端控件。
呵呵,准备工作完成。
(2) 创建一个字段时,在页面TableDataField.aspx 和用户控件WebUserControlCls.ascx 包含的内容<1> 页面TableDataField.aspx 包含的内容为:<2>用户控件WebUserControlCls.ascx 包含的内容为:(3)在页面TableDataField.aspx 中,说四个要点。
<1>动态增加用户控件1、获得用户控件WebUserControlCls webUserCtrl =(WebUserControlCls)Page.LoadControl("WebUserControlCls.ascx");2、将用户控件增加到PlaceHolder 中this.plhDataFields.Controls.Add(webUserCtrl);3、对用户控件的按钮注册动态事件,这里使用事件和代理。
关于事件和代理,请参见<<在C#的事件、多播中使用委托>>一文:/scucj/archive/2006/07/13/915482.aspxwebUserCtrl.btnDelRow.Attributes.Add("onclick", "return confirm('确定要删除该字段吗?');");webUserCtrl.btnDelRow.Click +=new EventHandler(btnDelRow_Click);4、对PlaceHolder 中的所有用户控件来设置ID 属性,将用户控件的ID 和被它包含的按钮的ID 相同,目的是为了点击用户控件中的"删除"按钮可以通过"删除"按钮ID 来获得用户控件ID,然后可以删除该用户控件setControlsID();<2>动态删除用户控件1、创建一个用户控件的实例WebUserControlCls webUserCtrl = new WebUserControlCls();2、通过“删除”按钮的ID 来获得用户控件的IDwebUserCtrl.ID = btnDel.ID;3、通过用户控件的ID 来删除用户控件this.plhDataFields.Controls.Remove(this.plhDataFields.FindControl(webUserCtrl.ID));4、对PlaceHolder 中的剩下所有用户控件来重新设置ID 属性setControlsID();<3>保持用户控件的状态IsPostBack 表示页面是否首次加载,如果是,则用户控件状态个数为0;如果不是,则要加载用户控件。
if (! IsPostBack ){//跟踪用户控件状态个数ViewState[ "DataFieldCount" ] = 0;}else{for ( int counter = 0 ; counter < (int)ViewState ["DataFieldCount"]; counter++){//加载用户控件AddDataField( counter.ToString() );}}<4> 用户控件添加成功后,我们提交这个页面。
本例通过点击“获得属性”按钮来获得用户控件中输入的值的。
在这其中,我们通过一个foreach 来找到所有的webUserCtrl,然后通过webUserCtrl 中提供的属性来获得各个控件输入的值。
if(ViewState["DataFieldCount"]!=null){foreach(WebUserControlCls webUserCtrl in this.plhDataFields.Controls){Response.Write(webUserCtrl.DataFieldName);Response.Write(webUserCtrl.LogicName);Response.Write(webUserCtrl.DataFieldType);Response.Write(webUserCtrl.TypeLength);Response.Write("<br>");}}(4)在用户控件WebUserControlCls.ascx中,说三个要点。
<1> 应该在其WebUserControlCls.ascx.cs 把“删除”按钮的范围从protected 改为public,因为我们需要在页面TableDataField.aspx 中对“删除”按钮添加属性和事件。
这样:protected System.Web.UI.WebControls.Button btnDelRow应该变为:public System.Web.UI.WebControls.Button btnDelRow注意,在用户控件WebUserControlCls.ascx 移动某个控件时,“删除”按钮的范围会从已经修改的public 变回为protected。
那么就需要再次将protected 改为public。
<2> 在用户控件WebUserControlCls.ascx 中为各个控件定义属性,以便页面TableDataField.aspx 中可以方便获取控件中输入的值。
比如:物理名称,只读属性public string DataFieldName{get{return txtDataFieldName.Text.Trim();}}逻辑名称,只读属性public string LogicName{get{return txtLogicName.Text.Trim();}}呵呵,整个思路就是这样。
由于CSDN 的blog 不能上传文件,我下面给出TableDataField.aspx 和WebUserControlCls.ascx 两个文件的四个部分的源代码。
或者给我发邮件:scucj@。
<1> TableDataField.aspx<%@ Page language="c#" Codebehind="TableDataField.aspx.cs" AutoEventWireup="false " Inherits="ScuHR.TableSet.TableDataField" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD><title>TableDataFiled</title><meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"><meta name="CODE_LANGUAGE" Content="C#"><meta name="vs_defaultClientScript" content="JavaScript"><meta name="vs_targetSchema" content="/intellisens e/ie5"></HEAD><body MS_POSITIONING="GridLayout"><form id="Form1" method="post" runat="server"><TABLE id="Table1" style="Z-INDEX: 101; LEFT: 56px; WIDTH: 680px; POSITIO N: absolute; TOP: 32px; HEIGHT: 75px"cellSpacing="1" cellPadding="1" width="680" border="1"><TR><TD style="WIDTH: 21px"><FONT face="宋体"></FONT></TD><TD style="WIDTH: 621px"></TD><TD></TD></TR><TR><TD style="WIDTH: 21px"></TD><TD style="WIDTH: 621px"><asp:PlaceHolder id="plhDataFields" runat="server"></asp:PlaceHolder> </TD><TD></TD></TR><TR><TD style="WIDTH: 21px"></TD><TD style="WIDTH: 621px"></TD><TD></TD></TR><TR><TD style="WIDTH: 21px"></TD><TD style="WIDTH: 621px"><asp:Button id="btnAadd" runat="server" Text="增加"></asp:Button></ TD><TD></TD></TR><TR><TD style="WIDTH: 21px"></TD><TD style="WIDTH: 621px"><FONT face="宋体"><asp:Button id="btnGetValue" runat="server" Text="获得属性值"></as p:Button></FONT></TD><TD></TD></TR></TABLE></form></body></HTML><2>TableDataField.aspx .csusing System;using System.Collections;using ponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace ScuHR.TableSet{///<summary>/// TableDataFiled 的摘要说明。