0

我正在开发一个应用程序(VB.NET 和 Visual Studio 2010 Pro),需要以下方面的帮助:

1)项目/产品存储在数据库中,这些项目存储在特定的组下。

2)加载我的表单后,我需要获取项目表中所有组的列表并为每个组项创建一个按钮,除此之外,它还必须为每个组添加一个选项卡到相邻的选项卡控制。我已经能够做到这一点,但不使用按钮,而是使用列表视图。我的完美解决方案将能够使用按钮来做到这一点。

3)在为选项卡及其各自的选项卡创建按钮后,我需要使用各自组下列出的项目进一步填充每个选项卡,这里的项目也需要在理想情况下显示为按钮,但我将使用如果需要,请查看列表视图。

4) 我想让它一旦创建组和项目的按钮,如果不是永久地仅用于运行应用程序的会话,则必须将其保存为界面的一部分。(即不必在每次加载标签页时都重新创建它,而应该在每次运行应用程序时只创建一次。)

这是我从数据库中获取组并填充列表视图的代码,以及用于生成选项卡并向选项卡添加列表视图的代码:

 Private Sub frmItemSearch_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    lstItemGroups.Clear()
    tbItemGroups.TabPages.Clear()
    If openConnection(SQLConnection6) Then

        Dim cmd2 As String = "select distinct itemgroup " & vbCrLf & _
                             "from stkitem" & vbCrLf & _
                             "where ItemGroup != ''" & vbCrLf & _
                             "order by ItemGroup asc"

        SQLCommand5 = New SqlClient.SqlCommand(cmd2, SQLConnection6)
        SQLReader6 = SQLCommand5.ExecuteReader

        While SQLReader6.Read
            lstItemGroups.Items.Add(SQLReader6.Item(0))
        End While

    End If
    Dim x, i, index As Integer
    x = lstItemGroups.Items.Count
    i = 0
    index = 0
    Dim NewTab As New TabPage()

    'MessageBox.Show(x)

    While i < x
        NewTab.Text = lstItemGroups.Items(i).Text
        tbItemGroups.TabPages.Insert(index, NewTab)
        i += 1
        index += 1
    End While

End Sub



 Private Sub lstItemGroups_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstItemGroups.Click

    Dim lstMenuItems As New ListView()
    lstMenuItems.BackColor = Color.Blue
    lstMenuItems.Dock = DockStyle.Fill
    lstMenuItems.Items.Add("A")
    lstMenuItems.Items.Add("A")
    lstMenuItems.Items.Add("A")
    lstMenuItems.Items.Add("A")
    lstMenuItems.Items.Add("A")

    Dim index As Integer = lstItemGroups.SelectedIndices(0)
    tbItemGroups.SelectedIndex = index

    tbItemGroups.SelectedTab.Controls.Add(lstMenuItems)

End Sub

这里的问题是,当我单击组时,会选择相应的选项卡,但不会将列表视图添加到选项卡中。如果我能做到这一点,那么使用该组中的项目填充它是可以实现的,因为它与在组列表视图中填充组相同。(在我的代码中添加到列表视图的项目仅用于测试目的。)

所以总而言之,

主要问题是如何将列表视图添加到动态生成的选项卡中?

如果您可以帮助解决使用按钮而不是列表视图的解决方案,那将是很棒的,我将不胜感激。

提前致谢,

4

1 回答 1

1

Tabs错误地添加了导致整体TabControl有缺陷的内容,因此Controls无法添加任何内容。正确的做法是:

While i < x
    Dim NewTab As New TabPage() 'This has to be called as many times as tabs to include
    NewTab.Text = lstItemGroups.Items(i).Text
    tbItemGroups.TabPages.Insert(index, NewTab)
    i += 1
    index += 1
End While

更正后,代码中的代码lstItemGroups_Click将正常工作。尽管如此,请记住,您添加的控件没有在给定选项卡中指定大小 ( Width/ Height) 和位置 ( Left/ Top);你应该考虑这些问题。

于 2013-08-02T13:51:40.930 回答