Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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不同选项卡上的控件_Vb.net_Datagridview_Tabcontrol - Fatal编程技术网

如何引用位于VB.NET不同选项卡上的控件

如何引用位于VB.NET不同选项卡上的控件,vb.net,datagridview,tabcontrol,Vb.net,Datagridview,Tabcontrol,希望在另一个由代码创建的选项卡上引用数据网格视图 我想用当前所选选项卡中的数据网格视图的列填充组合框。现在我只能让组合框填充用户加载的最后一个文件,而不是选择w/e选项卡 Dim mstrFirstFile As String = "" Dim mstrFileName As String = "" Dim mdstTableInput As New DataSet Dim mintCounter As Integer Dim mdgvTab As DataGridView Public Fu

希望在另一个由代码创建的选项卡上引用数据网格视图

我想用当前所选选项卡中的数据网格视图的列填充组合框。现在我只能让组合框填充用户加载的最后一个文件,而不是选择w/e选项卡

Dim mstrFirstFile As String = ""
Dim mstrFileName As String = ""
Dim mdstTableInput As New DataSet
Dim mintCounter As Integer
Dim mdgvTab As DataGridView

Public Function CreateNewDGVInsideNewPageTab() As DataGridView
    Dim tbpNewTab As New TabPage()
    tbpNewTab.Text = mstrFileName

    Dim mdgvTabControl As New DataGridView
    mdgvTabControl.Dock = DockStyle.Fill
    mdgvTabControl.Name = ("Grid" + ToString(mintCounter))

    tbpNewTab.Controls.Add(mdgvTabControl)
    tbcsource.TabPages.Add(tbpNewTab)
    tbcsource.SelectedTab = tbpNewTab
    Return mdgvTabControl
End Function

Private Sub generate()

    Dim objCLSConverter As New DataTier.clsCSVConverter
    Dim strNewXMLPath As String = ""
    Dim xmlFile As XmlReader

    If mstrFirstFile.Length > 1 Then


        strNewXMLPath = objCLSConverter.writeXML(mstrFirstFile)

        xmlFile = XmlReader.Create(strNewXMLPath, New XmlReaderSettings())

        Dim dsTemp As DataSet = New DataSet
        Dim dtTable As DataTable = Nothing

        dsTemp.ReadXml(xmlFile)
        dtTable = dsTemp.Tables(0).Copy
        dtTable.TableName = mintCounter
        mdstTableInput.Tables.Add(dtTable)

        mdgvTab = CreateNewDGVInsideNewPageTab()

        mdgvTab.DataSource = mdstTableInput.Tables(mintCounter)

        mintCounter = (mintCounter + 1)

        cbxColumnsUpdate()

        xmlFile.Close()

    End If
End Sub
任何帮助或如果您需要更多我的代码,请告诉我


该程序获取用户添加的任何.csv或.xls文件,并将其放入数据集中。它将这些文件添加到一个新的“代码生成”选项卡上,其中包含一个数据网格视图,该视图中加载了文件

选择选项卡时,组合框将填充该选项卡数据网格视图的所有列名,您可以选择任何选项卡,它将重新填充该选项卡的组合框。然后,您可以从组合框中选择列名,然后在文本框中输入您正在该列中搜索的w/e,这只是一个select where子句

然后,这些数据将被放入下面的数据网格视图中,供用户查看并导出到excel或继续更改。这些都是为了一般的报告目的和数据处理


现在的问题是组合框不会根据所选的选项卡重新填充

只是一个选项-将其转换为:

Dim mdgvTab As DataGridView
查字典:

Dim mdgvTabDictionary As Dictionary(Of Integer, DataGridView)
然后,在
Sub-generate()
中替换以下内容:

mdgvTab = CreateNewDGVInsideNewPageTab()
为此:

Dim mdgvTab As DataGridView = CreateNewDGVInsideNewPageTab()
mdgvTabDictionary.Add(mintCounter, mdgvTab)
现在,您不需要处理控件层次结构并按名称查找控件。相反,您可以通过索引找到所需的
DataGridView
mdgvTabDictionary(index)

不要忘记初始化
mdgvTabDictionary
Form\u Load
(或适用于您的情况的任何其他位置):


如果在设计时,控件应该在窗体级别可用。在运行时,每个选项卡控件中都有标记页。只需参考TabPage.Controls.就可以了。有这样的例子吗?编码不是很好:P。然后尝试在该选项卡中引用数据网格视图似乎有点棘手,因为没有太多细节,很难准确地说出。一个选项是使用
mdgvTab.Controls(“网格”+ToString(mintCounter))
,但最好保留一个
字典(ToString(mintCounter),DataGridView)
。你需要字典用法的例子吗?任何和所有的例子都很好:)看看我的答案-希望它有帮助。当我尝试使用
strColNames(i)=mdgvTabDictionary(mintCounter)时,得到错误“给定的键在字典中不存在”。Columns(i).Name
从未使用过dictionary,因此对我来说有点奇怪。@Xnub:如果您将
mintCounter
作为
generate
的最后一个语句之一进行递增,则它将等于
(x+1)
,其中
x
是dictionary中的最大键,当然,该键不在其中。在执行此操作之前,您需要知道将访问哪个索引。我提到
mintCounter
是为了显示
键后面的逻辑依据。您可能不会使用此特定变量(从代码中看到)。好的,我看到了使用
mintCounter
的问题。但是仍然找不到一种方法来选择我想要的字典的正确索引。第一个将选择fine并填充组合框。但是,如果我添加了另一个选项卡,它会出现相同的错误,但会为该选项卡生成组合框,但如果我再次选择第一个选项卡,它将不再生成组合框。@Xnub:我希望您不会每次单击选项卡时都生成它们,对吗?同样,如果没有更多细节,很难帮助您。如果您觉得需要进一步帮助,请考虑更新您原来的问题。如果您不介意与我们共享,这种设计的目的也会有所帮助。Na它只会在每次单击“添加文件”按钮时生成一个选项卡。我更新了这个问题,更详细地介绍了我的程序目前正在尝试做什么。
mdgvTabDictionary = New Dictionary(Of Integer, DataGridView)