问题描述
一个窗体上有160个textbox控件,现在窗体与数据库想连接,想达到的效果是只要有一个变动,就修改到数据库中对应的表格内,成型的代码应该是这样PrivateSubmControl_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles_textbox1.textchanged,textbox2.textchanged,textbox3.textchange,..........textbox160.textchangedEndSub总感觉写160个太烦琐了,问下高手可有简单的方法,比如me.controls(textbox()).textchange这样的用法致谢。
解决方案
解决方案二:
好像只能这样写法,没有简单的写法了
解决方案三:
我觉得可以内存中定义一个textbox(159)的控件数组,初始时先将textbox1,textbox2.....和控件数组对应好。这样,无论你是在textbox_textchangde的事件里便利这160个控件有没有改变也更方便。然后你这个写法,可以定义个事件,for循环写一下,把textbox(i).textchange和事件捆绑就好了。一举两得。嗯,就这个想法
解决方案四:
引用2楼Cai_12543的回复:
我觉得可以内存中定义一个textbox(159)的控件数组,初始时先将textbox1,textbox2.....和控件数组对应好。这样,无论你是在textbox_textchangde的事件里便利这160个控件有没有改变也更方便。嗯,就这个想法
这个听懂了引用2楼Cai_12543的回复:
然后你这个写法,可以定义个事件,for循环写一下,把textbox(i).textchange和事件捆绑就好了。一举两得。嗯,就这个想法
这个真心不懂我太菜了,纯新手,望解疑
解决方案五:
for(inti=1;i<=160;i++){TextBoxt=this.Controls["textBox"+i.ToString()]asTextBox;t.Changed+=...}
解决方案六:
用数据绑定可以实现楼主的要求,就是绑定表格中的某一行的数据到窗体上的各个文本框(当然组合框,日历控件等也可以),这样就不再需要再写事件,只要有更改就自动更新到数据表
解决方案七:
160个textbox?设计的不合理。我会drawstring,然后动态加载一个textbox作为编辑器
解决方案八:
窗体加载中的代码,前面有连接数据库的代码这里不写了Fori=0ToDataGridView1.ColumnCount-1LableFld(i)=NewLabelPanelDetail.Controls.Add(LableFld(i))LableFld(i).Visible=TrueLableFld(i).Left=100LableFld(i).Top=txttop+4+i*30LableFld(i).Text=DataGridView1.Columns(i).HeaderTextLableFld(i).AutoSize=TrueTxtFld(i)=NewTextBoxPanelDetail.Controls.Add(TxtFld(i))TxtFld(i).Visible=TrueTxtFld(i).Left=160TxtFld(i).Top=txttop+i*30TxtFld(i).ReadOnly=TrueTxtFld(i).Width=250IfInStr(LableFld(i).Text,"描述")>0ThenTxtFld(i).Multiline=TrueTxtFld(i).Height=150EndIfAddHandlerTxtFld(i).TextChanged,AddressOfTxtFld_TextChanged'注册txtfld控件数组的TextChanged事件AddHandlerTxtFld(i).Click,AddressOfTxtFld_Click'注册txtfld控件数组的TextChanged事件Next
点击事件,change的类似PrivateSubTxtFld_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)IfNotTypeOfsenderIsTextBoxThenExitSubFori=0ToUBound(TxtFld)Ifsender.Equals(TxtFld(i))AndInStr(LableFld(i).Text,"类型")>0AndTxtFld(i).ReadOnly=FalseThenElseIfsender.Equals(TxtFld(i))AndInStr(LableFld(i).Text,"描述")>0AndTxtFld(i).ReadOnly=FalseThenElseIfsender.Equals(TxtFld(i))AndInStr(LableFld(i).Text,"文件等级")>0AndTxtFld(i).ReadOnly=FalseThenEndIfNextEndSub