winform 难题 TabControl

a522134398 2010-04-12 11:47:26
描述:下面这个方法是主窗体中的公共方法,主用是用于MainForm中的TabControl中动态添加TabPage,
然后又在TabPage中又嵌套一个传进来的Form。
public void AddTabPageForm(Form f)
{

Form form = f;
TabPage tab = (TabPage)formList["tab" + form.Name];
if (tab == null)
{
tab = new TabPage();
formList.Add("tab" + form.Name, tab);
form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form_Closing);
form.FormBorderStyle = FormBorderStyle.None;
form.Dock = DockStyle.Fill;
form.TopLevel = false;
form.Visible = true;
form.Parent = tab;

tab.Name = "tab" + form.Name;
tab.Text = " " + form.Text + " ";
this.MainTabControl.TabPages.Add(tab);
this.MainTabControl.SelectedTab = tab;
}
}

.....
项目中,现在有一个叫LaborAdd的窗体,窗体中有一个TabControl,名叫LaborTabControl,并且包含了两个TabPage,一个是TabPage1和TabPage2。
通过调用AddTabPageForm(Form f)方法,显示LaborAdd窗体,现在问题出现了。
问题:TabPage1的所有控件,例如Label、TextBox等都能显示出来,但是切换到TabPage2的时候,原来已经添加的Label和TextBox等所有控件一个都没有显示出来。
然后我在LaborAdd中测试了一下,
foreach (Control con in tabPage2.Controls)
{

con.Visible = true;
Console.WriteLine(con.Visible);
}
发现tabPage2下面的控件的Visible都是false的,就算在前面加了con.Visible=true,到最后输出都还是false.
请问高手们,这个问题怎样解决???
...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiehuanxie 2010-04-12
  • 打赏
  • 举报
回复
首先看tab.Controls到底有没有加的那些控件
然后就是tabcontrol 的机制, 试试先把tabpage加到tabcontrol, 再往tabpage里加form
Justin-Liu 2010-04-12
  • 打赏
  • 举报
回复
3连发好了 占位
Justin-Liu 2010-04-12
  • 打赏
  • 举报
回复
把每一组控件放在一个panel里面
还有一点 检查检查你TabControl切换的逻辑写得是否完全准确
Justin-Liu 2010-04-12
  • 打赏
  • 举报
回复
控件层次问题吧 你那些控件都被盖在下面了 放上面来试试
a522134398 2010-04-12
  • 打赏
  • 举报
回复
问题,已经给本人解决了!

private Hashtable formList = new Hashtable();
private Form form = null;
/// <summary>
/// 添加TabPages
/// </summary>
/// <param name="obj">窗体</param>
public void AddTabPageForm(Form f)
{
try
{
this.form = f;
TabPage tab = (TabPage)formList["tab" + form.Name];
if (tab == null)
{
tab = new TabPage();
formList.Add("tab" + form.Name, tab);
form.MdiParent = this;//1.关键
form.FormBorderStyle = FormBorderStyle.None;
form.Dock = DockStyle.Fill;
form.TopLevel = false;
form.Visible = true;
form.Parent = tab;//2.关键
tab.Name = "tab" + form.Name;
tab.Text = " " + form.Text + " ";
tab.Parent = this.MainTabControl;
this.MainTabControl.SelectedTab = tab;

}
}
catch (Exception ex)
{
MessageBox.Show("系统发生异常,请与管理员联系!原因:" + ex.Message);
}
}

结贴

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧