我有自定义MDI父表单和自定义子表单,我想在mdi表单上设置标题,当mdi子表单最大化时,它自己的文本+ mdi子表单文本。怎么可能呢?
mdi child form的正常状态,它正常工作。
在此图像中,您可以看到表单状态是最大化但MDI子项的文本未显示MDI父表单的文本。
答案 0 :(得分:2)
当您最大化MDI子项时,MDI容器的文本将显示为:
ParentText - [ChildText]
因此,根据您的修改,我认为您有CustomText
属性,如下所示:
private string CustomText
{
get { return toolStripLabel1.Text; }
set { toolStripLabel1.Text = value; }
}
其中显示了表单的自定义标题栏。然后,如果您有类似标准标题栏的表单,则可以处理MDI子表单的Activated
和SizeChanged
事件,并使用CustomText
以这种方式设置BeginInvoke
:< / p>
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2() { Text = "Form2" };
f.MdiParent = this;
f.Activated += new EventHandler(f_Activated);
f.SizeChanged += new EventHandler(f_SizeChanged);
f.Show();
}
void f_SizeChanged(object sender, EventArgs e)
{
this.BeginInvoke(new Action(() => { CustomText = this.Text; }));
}
void f_Activated(object sender, EventArgs e)
{
this.BeginInvoke(new Action(() => { CustomText = this.Text; }));
}
注意强>
MdiChildActivate
可用于检测MDI子项何时打开或关闭。ActiveMdiChild
属性显示活动的MDI子项。答案 1 :(得分:0)
尝试表单Size_Changed
事件,(Form1
是MDI父级,TestForm
(frm)是MDI子级)
TestForm frm;
private void Form1_Load(object sender, EventArgs e)
{
frm = new TestForm();
frm.MdiParent = this;
frm.SizeChanged += Frm_SizeChanged;
frm.Show();
}
private void Frm_SizeChanged(object sender, EventArgs e)
{
if (frm.WindowState == FormWindowState.Maximized) { // checks Form's Window state and return true if it is maximized (mdi child's event btw)
this.Text = this.Text + " " + frm.Text; // do what ever do you want in here
}
}
希望有所帮助,