问题描述
在MDI窗体中,如何把最小化的子窗体放在主窗体的状态栏上
解决方案
解决方案二:
下面的代码只是实现你上面说的要求。如果要求点击状态栏上的按钮,再把窗体show出来,还需要在下面代码的基础上再扩展。主要的思路就是,在父窗体能处理子窗体的最小化事件。//先建一个FormBase的基类,子窗体都从这个基类继承publicclassFormBase:System.Windows.Forms.Form{publicdelegatevoidFormMinSize(objectsender,EventArgse);publiceventFormMinSizeOnFormMinSize;publicFormBase(){}//重载,用来处理自己定义的事件protectedoverridevoidOnSizeChanged(EventArgse){base.OnSizeChanged(e);if(this.OnFormMinSize!=null){this.OnFormMinSize(this,e);}}}//下面是父窗体的类publicpartialclassFormParent:Form{publicFormParent(){InitializeComponent();}//这里是show子窗体的按钮,用来测试,Form3是从FormBase继承的privatevoidform3ToolStripMenuItem_Click(objectsender,EventArgse){Form3form=newForm3();form.MdiParent=this;//添加事件form.OnFormMinSize+=newFormBase.FormMinSize(form_OnFormMinSize);form.Show();}//这里是主要的处理部分privatevoidform_OnFormMinSize(objectsender,EventArgse){//获取子窗体FormchildForm=(Form)sender;//最小化的时候,状态栏添加一个控件//加上childForm.Visible==true条件为了防止被添加两次,具体原因测试一下就知道了if(childForm.WindowState==FormWindowState.Minimized&&childForm.Visible==true){childForm.Hide();//状态栏添加一个控件ToolStripStatusLabellabel=newToolStripStatusLabel();label.Text=childForm.Text;label.BorderSides=ToolStripStatusLabelBorderSides.All;label.BorderStyle=Border3DStyle.RaisedInner;this.statusStrip1.Items.Add(label);}}}
解决方案三:
谢谢