Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.net的TableLayoutPanel中组织Groupbox中的控件_Vb.net_Visual Studio 2010_Tablelayoutpanel_Groupbox - Fatal编程技术网

如何在VB.net的TableLayoutPanel中组织Groupbox中的控件

如何在VB.net的TableLayoutPanel中组织Groupbox中的控件,vb.net,visual-studio-2010,tablelayoutpanel,groupbox,Vb.net,Visual Studio 2010,Tablelayoutpanel,Groupbox,我在Windows窗体应用程序设计中遇到了一个有趣的问题,我在解决这个问题时遇到了一些困难。我目前正在开发一个程序,该程序应该是我公司使用的某个清单的数字替代品。这应该很简单,但是程序必须使用SQL数据库的内容来确定程序中的检查表上应该有哪些项目(这样可以很容易地更改检查表中的项目)。这意味着我必须使用代码而不是VisualStudio2010设计器来动态设计和创建大部分应用程序 我已经能够理解SQL的东西,甚至是大多数动态设计的东西,但是有一个复杂的问题我似乎无法克服。为了创建清单的外观,我动

我在Windows窗体应用程序设计中遇到了一个有趣的问题,我在解决这个问题时遇到了一些困难。我目前正在开发一个程序,该程序应该是我公司使用的某个清单的数字替代品。这应该很简单,但是程序必须使用SQL数据库的内容来确定程序中的检查表上应该有哪些项目(这样可以很容易地更改检查表中的项目)。这意味着我必须使用代码而不是VisualStudio2010设计器来动态设计和创建大部分应用程序

我已经能够理解SQL的东西,甚至是大多数动态设计的东西,但是有一个复杂的问题我似乎无法克服。为了创建清单的外观,我动态创建了一个包含两列和一行的TableLayoutPanel。然后,我从数据库中获取数据,创建一个groupbox,上面有使用程序的人需要执行的指令的标题。我还根据数据库条目向groupbox添加了一个带有标签、复选框或两者的文本框。最后,我将文本框、标签和/或复选框添加到groupbox,然后将一行添加到我的表中,并将groupbox添加到该行的表中。但是,groupbox中的所有控件都被压缩到行的左上角,因此我尝试使用它们的.location属性调整它们的组织。不幸的是,当我更改该属性时,受影响的控件将完全从窗体中消失。我尝试过使用.bringtofront()方法,但没有成功;控件仍然丢失

我想要的是关于如何在动态创建的groupbox(或任何其他分组控件)中组织动态创建的控件的指导,该控件本身包含在另一个动态创建的分组控件中。如果能得到任何帮助,我将不胜感激;这个问题使我无法开始使用程序的功能。适用代码如下所示。提前谢谢

Private Sub addItem(ByVal count As Integer, ByVal itemList As List(Of checklistField))
    If itemList(count).hasTextbox Or itemList(count).hasCheckbox Then
        Dim newGroupbox As New GroupBox
        With newGroupbox
            .Dock = DockStyle.Fill
            .Text = itemList(count).instruction
        End With

        If ((itemList(count).hasTextbox = True) And (itemList(count).hasCheckbox = False)) Then
            Dim newTextboxLabel As New Label
            With newTextboxLabel
                .Text = itemList(count).textboxLabel
                '.Location = New Point(20, (475))
                .AutoSize = True
            End With

            Dim newTextbox As New TextBox
            With newTextbox
                .Name = "Textbox" & count.ToString
                .Size = New Size(100, 20)
                '.Location = New Point(100, (470 + (10 * count)))
            End With

            textboxList.Add(newTextbox)
            newGroupbox.Controls.Add(newTextboxLabel)
            newGroupbox.Controls.Add(newTextbox)

            tblFields.RowCount += 1
            tblFields.RowStyles.Add(New RowStyle(SizeType.AutoSize))
            tblFields.Controls.Add(newGroupbox, 0, tblFields.RowCount - 1)

注释掉的位置属性的Y值设置得太高,因此控件在窗体上不可见:

'.Location = New Point(20, (475))
'.Location = New Point(100, (470 + (10 * count)))
控件的位置与父级的客户端空间有关,因此请使用较小的数字:

With newTextboxLabel
  .Text = itemList(count).textboxLabel
  .Location = New Point(20, 20)
  .AutoSize = True
End With

Dim newTextbox As New TextBox
With newTextbox
  .Name = "Textbox" & count.ToString
  .Size = New Size(100, 20)
  .Location = New Point(20, 40)
End With

成功了!谢谢这真的让我抓狂,因为我已经花了很多时间来搞乱这个位置,但运气不好。好了,该开始工作了!