如何结合自定义MDI Text& MDI标题栏上定制的MDI子文本?

时间:2016-09-28 11:05:23

标签: c# winforms

我有自定义MDI父表单和自定义子表单,我想在mdi表单上设置标题,当mdi子表单最大化时,它自己的文本+ mdi子表单文本。怎么可能呢?

enter image description here

mdi child form的正常状态,它正常工作。

enter image description here

在此图像中,您可以看到表单状态是最大化但MDI子项的文本未显示MDI父表单的文本。

2 个答案:

答案 0 :(得分:2)

当您最大化MDI子项时,MDI容器的文本将显示为:

ParentText - [ChildText]

因此,根据您的修改,我认为您有CustomText属性,如下所示:

private string CustomText
{
    get { return toolStripLabel1.Text; }
    set { toolStripLabel1.Text = value; }
}

其中显示了表单的自定义标题栏。然后,如果您有类似标准标题栏的表单,则可以处理MDI子表单的ActivatedSizeChanged事件,并使用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; }));
}

注意

答案 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
     }
}

希望有所帮助,