创建一个字符串引用vb.net中的表单

时间:2014-06-23 12:08:14

标签: vb.net

好的,我希望程序制作一些表,并且每个表都通过for循环使表列成为可能 这是我的代码:

   For i As Integer = 1 To Val(DatabaseCreationPage.TablesNumber.Text)
        cc.CommandText = "CREATE TABLE " & DatabaseTableCreationPage.tablesnames(i).Text
        cc.ExecuteNonQuery()
        If Val(DatabaseTableCreationPage.NumberOfColumnsInTable(i).Text) = 1 Then
            cc.CommandText = "ALTER TABLE " & DatabaseTableCreationPage.TablesNames(i).Text & " ADD " & set1.ColumnsNames(1).Text & " " & set1.TypeOfColumns(1).Text
            cc.ExecuteNonQuery()
        ElseIf Val(DatabaseTableCreationPage.NumberOfColumnsInTable(i).Text) = 2 Then
            For i1 As Integer = 1 To Val(DatabaseTableCreationPage.TablesNames(i).Text)
                cc.CommandText = "ALTER TABLE " & DatabaseTableCreationPage.TablesNames(i).Text & " ADD " & set1.ColumnsNames(i1).Text & " " & set1.TypeOfColumns(i1).Text
                cc.ExecuteNonQuery()
            Next 

我希望它是:

   For i As Integer = 1 To Val(DatabaseCreationPage.TablesNumber.Text)
      dim setForms as string = "set" & i
        cc.CommandText = "CREATE TABLE " & DatabaseTableCreationPage.tablesnames(i).Text
        cc.ExecuteNonQuery()
        If Val(DatabaseTableCreationPage.NumberOfColumnsInTable(i).Text) = 1 Then
            cc.CommandText = "ALTER TABLE " & DatabaseTableCreationPage.TablesNames(i).Text & " ADD " & setForms.ColumnsNames(1).Text & " " & setForms.TypeOfColumns(1).Text
            cc.ExecuteNonQuery()
        ElseIf Val(DatabaseTableCreationPage.NumberOfColumnsInTable(i).Text) = 2 Then
            For i1 As Integer = 1 To Val(DatabaseTableCreationPage.TablesNames(i).Text)
                cc.CommandText = "ALTER TABLE " & DatabaseTableCreationPage.TablesNames(i).Text & " ADD " & setForms.ColumnsNames(i1).Text & " " & setSetForms.TypeOfColumns(i1).Text
                cc.ExecuteNonQuery()
            Next 

因为我有table1,table2,table3和amp;等

所以我有set1,set2,set3,set4&等

TablesNames和NumberOfColumnsInTable是一种形式的数组,它使计算机根据我选择的表数自动创建TablesNames和NumberOfColumnsInTable:

dim TablesNames() As TextBox
ReDim TablesNames(DatabaseCreationPage.TablesNumber.Text)

    For TableNumber As Integer = 1 To val(DatabaseCreationPage.TablesNumber.Text)
       TablesNames(TableNumber) = New TextBox   
        With TablesNames(TableNumber)
            .Name = "textbox" & TableNumber.ToString
            .Size = New System.Drawing.Size(229, 20)
            .Location = New System.Drawing.Point(140, TableNumber * 25)
            .Enabled = True
            .Visible = True
        End With
        Me.Controls.Add(TablesNames(TableNumber))
    Next

注意:我不能在每个表格中选择超过10个表格,我不能选择超过10列

1 个答案:

答案 0 :(得分:2)

为什么要使用有意义的控件名称?

我经常看到的最常见的是匈牙利命名约定和Pascal命名约定。每个人对这些命名惯例都有自己的想法,但我认为这有点细分。

  • lblFirstName-显然我们知道这是一个应该包含名字的Label
  • btnSave - 显然我们应该知道这是一个Button调用一个可以保存数据的例程/方法
  • frmPerson - 这应该指出这是一个Form,其中包含某种人的详细信息。

这只是一个简短的例子,您可以找到更多here。 Joel Spolsky提供了另一篇精彩的读物here ......

至于你的问题......

 for counter as integer = 1 to 10
 dim forms as string = "form" & counter
 forms.textbox1.text = "test"
 next

在您的示例中,您有一个只循环并添加到字符串的计数器,但是您使用string.control.text这不起作用......

试试这个;是的还有其他方法......

 Dim arrNames As New List(Of String) 'This will have all your strings in an array...
 For i As Integer = 1 To 10
  arrNames.Add(CStr("frm" & i.ToString()))
 Next

现在你可以使用你可以使用的集合中的所有字符串......再次,这是一个坏主意;打我甚至做这样的事情......你真的应该先命名你的控件,然后根据控件名称自己设置一些字符串......