微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自tabcontrol的TabPage在C#Winforms中不显示数据

如何解决来自tabcontrol的TabPage在C#Winforms中不显示数据

我在Windows应用程序的tabcontrol中遇到问题。

我们在1个Windows窗体上都有一个tabcontrol,认情况下第一个选项卡在该窗体上,其他选项卡在运行时动态添加。 在第一种情况下,打开表单时,我们可以在两个标签中看到所有控件,即(标签和其他标签) 虽然,当我们尝试第二次打开表单时,如果我们进行调试,数据将被添加到表单中,但是在显示时,它会在其他选项卡中显示空白,这些选项卡会动态添加

在CustomgroupControl类中,我正在动态添加控件,如文本框,下拉列表,网格等。尽管这在第一种情况下有效,但在第二种情况下不显示控件。 (两种情况下的代码流都是相同的)

下面是链接中的屏幕截图,并显示了示例源代码

Screenshot for above query

public void renderTabpage(Dictionary<string,List<Field>> subHeaderMap,TabPage currentTabPage,AsynchTabRenderer asynchTabRenderer,DoWorkEventArgs e)
    {
        currentTabPage.SuspendLayout();
        TableLayoutPanel headerTableLayout = createNewheaferTableLayoutPanel(currentTabPage.Name + TABLE_LAYOUT_NAME_SUFFIX);
        currentTabPage.Controls.Add(headerTableLayout);
        headerTableLayout.ColumnCount = 1;
        headerTableLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent,100F));
        headerTableLayout.RowCount = 0;
        headerTableLayout.SuspendLayout();
        foreach (string subHeaderName in subHeaderMap.Keys)
        {
            if (asynchTabRenderer != null && asynchTabRenderer.CancellationPending == true)
            {
                e.Cancel = true;
                return;
            }
            else
            {
                CustomGroupControl customGroupControl = createAndPopulateSubheaderGroupControl(subHeaderMap[subHeaderName],subHeaderName);
                headerTableLayout.RowCount = headerTableLayout.RowCount + 1;
                headerTableLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
                headerTableLayout.Controls.Add(customGroupControl,++headerTableLayout.RowCount);
            }
        }
        headerTableLayout.ResumeLayout(false);
        headerTableLayout.Performlayout();
        currentTabPage.ResumeLayout(false);
        currentTabPage.Performlayout();
    }

 private void detailsTabControl_TabIndexChanged(object sender,EventArgs e)
    {
            tabIndexChangedEvent(((TabControl)sender).SelectedTab);            
    }

    private void tabIndexChangedEvent(TabPage tabPage)
    {
        try
        {
            //WordApp.ScreenUpdating = false;
            //WordApp.System.Cursor = Word.WdCursorType.wdCursorWait;
            if (tabPage.Name == TabName.Replace(" ","_").toupper())
            {
                FileUtilService service = FileUtilFactory.getInstance();
                //  service.clearIENetCache();
                showForm(Window,forms);
            }
            //TabPage tabPage = ((TabControl)sender).SelectedTab;
            if ((tabPage.Tag == null || true == (Boolean)tabPage.Tag) && !string.Equals(tabPage.Name,FieldConstants.TAB,StringComparison.CurrentCultureIgnoreCase))
            {
                var controls = WindowsFormControlUtils.GetControlHierarchy(tabPage);
                foreach (Control control in controls)
                {
                    
                    if (control is CustomGroupControl)
                    {
                        CustomGroupControl customGroupControl = (CustomGroupControl)control;
                        customGroupControl.fieldRenderDelegater();
                    }
                    else
                        continue;
                }
                
                tabPage.Tag = false;
            }
        }
        catch (Exception ex)
        {
           
            logger.Error(ex.Message);
        }
    }

       


 internal TableLayoutPanel createNewheaferTableLayoutPanel(string headerName)
        {
            TableLayoutPanel subHeaderTableLayout = new TableLayoutPanel();
            // resources.ApplyResources(subHeaderTableLayout,headerName.Replace(" ","_").toupper());
            subHeaderTableLayout.Name = headerName.Replace(" ","_").toupper() + TABLE_LAYOUT_NAME_SUFFIX;
            subHeaderTableLayout.Dock = DockStyle.Fill;
            subHeaderTableLayout.AutoSize = true;
            subHeaderTableLayout.AutoScroll = true;
            subHeaderTableLayout.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
            subHeaderTableLayout.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
            return subHeaderTableLayout;
        }

解决方法

@Jimi和@Lucky

有效。得到了正确的方向。谢谢。

提示-不要在辅助线程上创建控件 尝试解决方案并起作用-从参数化构造函数中删除控件的创建,并添加到form_load事件中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。