2

我对 c# .net 比较陌生。因此,如果您需要更多输入来回答我的查询,请告诉我。

1)我想做什么?

我使用的表单在 3 个不同的选项卡中有近 30 个数据网格视图控件。datagridview 的名称如下。 dgView1, dgView2,dgView3

除了上面的数据网格控件,我还得到了几个文本框控件,所以在选项卡 1 中更具体。我得到了下面的控件项。 txtTabName1, txtStrKey1,dgView1

现在我正在尝试编写一个函数,该函数将采用一个输入参数说int v_CtrlNum ,并使用此参数我需要从一个选项卡扫描每个项目并将其添加到 ArrayList/Collection。

因此,例如,该函数将需要从 datagrid 视图中读取每一行,如下所示

用于数据网格

foreach (DataGridViewRow in dgView+v_CtrlNum )

对于文本框

txtTabName+v_CtrlNum

我想知道我这样做的方向是否正确。

4

3 回答 3

2

您可以查看Controls.Find 方法,注意它返回匹配的控件数组。

Control[] tbp = tabControl1.Controls.Find("txtTabName" + 2,true );
if (tbp.Length > 0)
{
    Control[] dv = tbp[0].Controls.Find("dgView" + 2, true);
}
于 2012-11-16T01:53:02.713 回答
0

不完全确定我是否遵循您想要实现的目标,但我认为您只是想通过 ID 号获得控制权,对吗?你可以这样做:

List<Controls> myTabControls = new List<Controls>();
foreach (Control thisControl in this.Controls)
    if (thisControl.Name.Contains(v_CtrlNum.ToString()))
        foreach (Control thisChildControl in thisControl.Controls)
            myTabControl.Add(thisChildControl)thisChildControl

要获取与 对应的选项卡中的控件v_CtrlNum,假设它v_CtrlNum是一个标识符,它是控件名称的一部分。然后通过选项卡中的控件来处理每个 DataGridView,可能是这样的:

foreach (Control thisControl in myTabContols)
    if (thisControl.GetType() == typeof(DataGridView))
       // Parse your DataGridView's rows here

this.Controls您的表单的控件集合在哪里(this在这种情况下是指您的父表单)。

这有帮助吗?但是我不确定我是否正确理解了您在问题中所问的内容...

于 2012-11-16T00:12:31.867 回答
0

我认为您可能想要做的是这样的事情:

DataGridView[] formDataGrids = this.Controls.OfType<DataGridView>().ToArray();

这将为您提供表单中所有 DataGridViews 的数组。您可以使用该选项卡的控制列表为单个选项卡执行此操作。您可以对文本框执行相同的操作,只需将数组类型和 OfType() 调用中的类型替换为 TextBox。

您不能像在您的示例中那样使用 foreach,因为“in”的右侧必须是对特定列表或数组的引用(实现 IEnumerable 的东西)。但是,如果您创建了一个像上面这样的列表,那么您可以执行以下操作:

foreach(DataGridView thisGrid in formDataGrids)
    DoSomething(thisGrid);

或者也将它们链接在一起,如:

foreach(DataGridView thisGrid in this.Controls.OfType<DataGridView>())
    DoSomething(thisGrid);

对于多选项卡处理,您应该已经在设计器中为每个页面创建了 TabPage 成员。然后,您可以执行以下操作:

var formDataGrids = new List<DataGridView>();
if (usingTab1)
    formDataGrids.AddRange(tabPage1.Controls.OfType<DataGridView>());
if (usingTab2)
    formDataGrids.AddRange(tabPage2.Controls.OfType<DataGridView>());
if (usingTab3)
    formDataGrids.AddRange(tabPage3.Controls.OfType<DataGridView>());

foreach(var thisGrid in formDataGrids)
    DoSomething(thisGrid);
于 2012-11-16T00:52:13.547 回答