问题描述
我在Windows应用程序的tabcontrol中遇到问题。
我们在1个Windows窗体上都有一个tabcontrol,默认情况下第一个选项卡在该窗体上,其他选项卡在运行时动态添加。 在第一种情况下,打开表单时,我们可以在两个标签中看到所有控件,即(默认标签和其他标签) 虽然,当我们尝试第二次打开表单时,如果我们进行调试,数据将被添加到表单中,但是在显示时,它会在其他选项卡中显示空白,这些选项卡会动态添加。
在CustomgroupControl类中,我正在动态添加控件,如文本框,下拉列表,网格等。尽管这在第一种情况下有效,但在第二种情况下不显示控件。 (两种情况下的代码流都是相同的)
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事件中。