MDI 中用TabControl显示子窗体.如何获得子窗体的焦点

nicejane 2008-11-05 11:19:06
MDI 中用TabControl显示子窗体.
出现以下问题:

1. 子窗体的IsMdiChild 为 true .但是加入TabPage后变成了false.如下代码


TabPage tp = new TabPage();

ChildForm cf = new ChildForm(); //创建子窗体
cf.TopLevel = false;
cf.MdiParent = this;
cf.Dock = DockStyle.Fill;
//到此 cf.IsMdiChild 值为 true
tp.Controls.Add(cf); //子窗体加入TabPage中
//到此 cf.IsMdiChild 值为 false

cf.Show();
this.TabControl.TabPages.Add(tp); //加入TabControl

不知为何使用了Controls.Add后会使子窗体的IsMdiChild变为false

2.通过代码动态创建多个子窗体后.MDI主窗体的 this.MdiChildren 为0 没有子窗体.如:

foreach (Form v in this.MdiChildren)  //this.MdiChildren数组为0不能进入循环
{
//...
}


由于以上两个原因.我不能.在选择某个TabPage时不能使其中的子窗体为激活状态.
请问如何解决?
为什么子窗体加入TabPage 后 IsMdiChild 值为 false ?
...全文
417 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻境之城 2011-04-14
  • 打赏
  • 举报
回复
private void LoadDllForm(string DLLFile, string DLLClassName, string FormCaption)
{
try
{
Assembly asm = Assembly.LoadFrom(DLLFile);
BaseForm ChildForm = asm.CreateInstance(DLLClassName) as BaseForm;
ChildForm.Text = FormCaption;
ChildForm.MdiParent = this;
ChildForm.TabCtrl = TabControl1;
TabPage tp = new TabPage();
tp.Parent = TabControl1;
tp.ImageIndex = 0;
tp.Text = ChildForm.Text;
tp.Show();
ChildForm.TabPag = tp;
ChildForm.Show();
ChildCount++;
TabControl1.SelectedTab = tp;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
s000rd 2008-11-07
  • 打赏
  • 举报
回复

const int WM_ACTIVATE = 0x6;
const int WA_ACTIVE = 0x01;
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
TabPage tp = new TabPage();

ChildForm cf = new ChildForm(); //创建子窗体
cf.TopLevel = false;
cf.MdiParent = this;
cf.Dock = DockStyle.Fill;
//到此 cf.IsMdiChild 值为 true
tp.Controls.Add(cf); //子窗体加入TabPage中
//到此 cf.IsMdiChild 值为 false
cf.Show();
this.TabControl.TabPages.Add(tp); //加入TabControl
SendMessage(cf .Handle, WM_NCACTIVATE, WA_ACTIVE, 0);


你试试上面的代码
nicejane 2008-11-07
  • 打赏
  • 举报
回复
是的就是要楼上的那种效果..
想要的是切换到 tbPage2时 里面的form 是激状态
51Crack 2008-11-05
  • 打赏
  • 举报
回复
tp.Controls.Add(cf); 这句的问题!
s000rd 2008-11-05
  • 打赏
  • 举报
回复

是不是这种效果?
  • 打赏
  • 举报
回复
TabPage是父窗体的吧,你把窗体添加到TablePage的Control集合后,相当于变成了父窗体的一部分,就不是父窗体的MDIChildren了
nicejane 2008-11-05
  • 打赏
  • 举报
回复
tp.Controls.Add(cf); 这句为什么会使IsMdiChild变为False ?
我是新手C#中的一会机制还是不太了解
Wesley 2008-11-05
  • 打赏
  • 举报
回复
不知道,帮顶~

110,534

社区成员

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

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

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