//1.MDI this.IsMdiContainer = true; //排列窗体 //this.LayoutMdi(MdiLayout.ArrangeIcons); //this.LayoutMdi(MdiLayout.Cascade); this.LayoutMdi(MdiLayout.TileHorizontal);//纵向排列 //新建子窗体 void NewToolStripMenuItemClick(object sender, System.EventArgs e) { mdiChildCount++; MDIChild mdiChild=new MDIChild(); mdiChild.MdiParent=this; mdiChild.Show(); mdiChild.Text="doc"+mdiChildCount.ToString();//先显示后设置属性? } //2.方法 //01.SuspendLayout 和 ResumeLayout this.SuspendLayout(); //改变属性 this.ResumeLayout(this); this.PerformLayout(); /****** 通常我们在设置子控件的一些与外观、布局有关的属性时,比如Size、Location、Anchor 或 Dock等,会激发子控件的Layout事件,并可能会引起窗口重绘,当子控件较多时, 如果频繁设置上述属性(例如在窗体的初始化代码中),多个子控件的 Layout事件会引起 窗口重绘效率问题,比如闪烁。使用SuspendLayout(),其后的代码中将会把子控件的Layout事件 暂时挂起,只是把相应属性的值设置为新值,并不激发Layout事件,待调用ResumeLayout()后, 再一起使子控件的Layout事件生效。 ******/ //3.找到激活的窗体及窗体内激活的控件 Form activeChild=this.ActiveMdiChild;//取得被激活的子窗体 if(activeChild!=null)//需要判空 { RichTextBox aBox=(RichTextBox)activeChild.ActiveControl;//取得窗体里处于焦点的控件 if(aBox!=null) { Font fontOfSelectedText=aBox.SelectionFont;//取得编辑区字体 FontStyle fs; fs=FontStyle.Italic;//斜体样式 Font FontToApply=new Font(fontOfSelectedText,fs);//新建带样式的字体 aBox.SelectionFont=FontToApply;//设置字体,设置之后,再输入的字体改变 } } //4.模式和非模式窗体,窗体返回值 void BtnModelResultClick(object sender, System.EventArgs e) { this.DialogResult=DialogResult.OK; this.Dispose(); } void BtnModelFormClick(object sender, System.EventArgs e) { //可以定义成类的一个变量,然后if(modelForm==null)判断 ModelForm modelForm=new ModelForm(); //modelForm.ShowDialog(); modelForm.ShowDialog(this); this.Text=modelForm.DialogResult.ToString();//取得返回值:"OK".. }