vb.net 数组控件的用法

6lilu9 2016-05-08 07:05:40
一个窗体上有160个textbox控件,现在窗体与数据库想连接,
想达到的效果是只要有一个变动,就修改到数据库中对应的表格内,成型的代码应该是这样

Private Sub mControl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
textbox1.textchanged,textbox2.textchanged,textbox3.textchange,..........textbox160.textchanged


End Sub

总感觉写160个太烦琐了,问下高手可有简单的方法,比如me.controls(textbox()).textchange 这样的用法

致谢。
...全文
356 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj_zwl 2016-05-10
  • 打赏
  • 举报
回复
160个textbox?设计的不合理。 我会drawstring,然后动态加载一个textbox作为编辑器
lhblxm 2016-05-10
  • 打赏
  • 举报
回复
用数据绑定可以实现楼主的要求,就是绑定表格中的某一行的数据到窗体上的各个文本框(当然组合框,日历控件等也可以),这样就不再需要再写事件,只要有更改就自动更新到数据表
  • 打赏
  • 举报
回复
窗体加载中的代码,前面有连接数据库的代码这里不写了
        For i = 0 To DataGridView1.ColumnCount - 1

            LableFld(i) = New Label
            PanelDetail.Controls.Add(LableFld(i))
            LableFld(i).Visible = True
            LableFld(i).Left = 100
            LableFld(i).Top = txttop + 4 + i * 30
            LableFld(i).Text = DataGridView1.Columns(i).HeaderText
            LableFld(i).AutoSize = True

            TxtFld(i) = New TextBox
            PanelDetail.Controls.Add(TxtFld(i))
            TxtFld(i).Visible = True
            TxtFld(i).Left = 160
            TxtFld(i).Top = txttop + i * 30
            TxtFld(i).ReadOnly = True
            TxtFld(i).Width = 250

            If InStr(LableFld(i).Text, "描述") > 0 Then
                TxtFld(i).Multiline = True
                TxtFld(i).Height = 150
            End If

            AddHandler TxtFld(i).TextChanged, AddressOf TxtFld_TextChanged '注册txtfld控件数组的TextChanged事件
            AddHandler TxtFld(i).Click, AddressOf TxtFld_Click '注册txtfld控件数组的TextChanged事件
        Next
点击事件,change的类似

  Private Sub TxtFld_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Not TypeOf sender Is TextBox Then Exit Sub
        For i = 0 To UBound(TxtFld)
            If sender.Equals(TxtFld(i)) And InStr(LableFld(i).Text, "类型") > 0 And TxtFld(i).ReadOnly = False Then
 
            ElseIf sender.Equals(TxtFld(i)) And InStr(LableFld(i).Text, "描述") > 0 And TxtFld(i).ReadOnly = False Then

            ElseIf sender.Equals(TxtFld(i)) And InStr(LableFld(i).Text, "文件等级") > 0 And TxtFld(i).ReadOnly = False Then
    

            End If
        Next

    End Sub
threenewbee 2016-05-08
  • 打赏
  • 举报
回复
for (int i = 1; i <= 160; i++) { TextBox t = this.Controls["textBox" + i.ToString()] as TextBox; t.Changed += ... }
6lilu9 2016-05-08
  • 打赏
  • 举报
回复
引用 2 楼 Cai_12543 的回复:
我觉得可以内存中定义一个textbox(159)的控件数组,初始时先将textbox1,textbox2.....和控件数组对应好。这样,无论你是在textbox_textchangde的事件里便利这160个控件有没有改变也更方便。 嗯,就这个想法
这个听懂了
引用 2 楼 Cai_12543 的回复:
然后你这个写法,可以定义个事件,for循环写一下,把textbox(i).textchange和事件捆绑就好了。一举两得。 嗯,就这个想法
这个真心不懂 我太菜了,纯新手,望解疑
Cai_12543 2016-05-08
  • 打赏
  • 举报
回复
我觉得可以内存中定义一个textbox(159)的控件数组,初始时先将textbox1,textbox2.....和控件数组对应好。这样,无论你是在textbox_textchangde的事件里便利这160个控件有没有改变也更方便。然后你这个写法,可以定义个事件,for循环写一下,把textbox(i).textchange和事件捆绑就好了。一举两得。 嗯,就这个想法
lilunlil 2016-05-08
  • 打赏
  • 举报
回复
好像只能这样写法,没有简单的写法了

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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