如何从TabPage Collection获取PropertyGrid

时间:2012-11-28 00:31:03

标签: c# winforms propertygrid tabpage generic-collections

我创建了 newPropertyGrid 并将其添加到 newTabPage 。我将所有newTabPage保存到lstTankTabPages(泛型集合)。我想在属性网格中更改数据时引发事件以更改主窗体上的自定义控件。 我的问题,如何从 lstTankTabPages 获取所有 newPropertyGrid ?谢谢。

    for (int i = 0; i < Modules.tankQuantity; i++)
    {
        string name = string.Format("Tank{0}", i + 1);

        // create newTabPage
        TabPage newTabPage = new TabPage(name);
        newTabPage.Name = string.Format("tabPage{0}", name);

        // create newPropertyGrid 
        PropertyGrid newPropertyGrid = new PropertyGrid();
        newPropertyGrid.Name = string.Format("propertyGrid{0}", name);
        newPropertyGrid.BrowsableAttributes = new AttributeCollection(new DisplayModeAttribute("Ullage,Gross,Netto,Water,Temperature,Density,Capacity,Connection,Appearance"));
        newPropertyGrid.SelectedObject = new TankInventoryCustom();

        // add newPropertyGrid to newTabPage
        newTabPage.Controls.Add(newPropertyGrid);

        // add newTabPage to tabControl
        this.tabControlTankInventory.TabPages.Add(newTabPage);

        // add newTabPage to collection
        Modules.lstTankTabPages.Add(newTabPage);
    }

2 个答案:

答案 0 :(得分:1)

假设Modules.lstTankTabPages是

List<TabPage>

然后这是获取您在该循环中创建的PropertyGrids的一种方法

foreach(TabPage page in Modules.lstTankTabPages) {
    PropertyGrid newPropertyGrid = (PropertyGrid)page.Controls[0];
    // do something with it
}

答案 1 :(得分:0)

您可以使用“OfType”获取所有PropertyGrid项目

foreach (TabPage page in Modules.lstTankTabPages)
{
    PropertyGrid newPropertyGrid = page.Controls.OfType<PropertyGrid>().FirstOrDefault()
    if (newPropertyGrid != null)
    {
        // do something with it
    }
}