Mdi应用程序操作步骤及代码最新.doc_第1页
Mdi应用程序操作步骤及代码最新.doc_第2页
Mdi应用程序操作步骤及代码最新.doc_第3页
Mdi应用程序操作步骤及代码最新.doc_第4页
Mdi应用程序操作步骤及代码最新.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实现MDI应用程序目标:一、实现MDI1、创建父窗体frmMdiFather,设置其Name、Text、IsMdiContainer属性2、添加StatusStrip控件,修改其Text属性为空3、创建子窗体frmChild,设置其Name属性4、为父窗体添加构造函数:public frmMdiFather() InitializeComponent(); frmChild doc = new frmChild(this); doc.Show(); 同时修改子窗体构造函数public frmChild(frmMdiFather parent) InitializeComponent(); this.MdiParent = parent; 运行看效果:父子窗体之间的关系。二、添加菜单和RichTextBox控件5、为父窗体添加主菜单文件|新建、打开、退出,并修改其Name属性(MunuFile和MenuNew)6、为子窗体添加RichTextBox控件,并设置其Anchor属性7、为“新建”菜单添加事件处理函数:/声明并初始化全局变量,用来记录打开的子窗体数目int windowCount=1;修改子窗体构造函数/此处增加注释public frmChild(frmMdiFather parent,string caption) InitializeComponent(); this.MdiParent = parent; this.Text=caption; /子窗体标题 同时修改父子窗体的构造函数public frmMdiFather() InitializeComponent(); windowCount+; string caption=”文档”+windowCount; frmChild doc = new frmChild(this,caption); doc.Show(); /“文件”|“新建”菜单项单击事件处理函数private void MenuNew_Click(object sender, EventArgs e) windowCount+; string caption= 文档 + windowCount; frmChild doc = new frmChild(this, caption); doc.Show(); 三、RichTextBox控件 (1) 公共属性:n AcceptsTab获取或设置一个值,该值指示在多行文本框控件中按Tab键时,是否在控件中输入一个Tab字符,而不是按选项卡的顺序将焦点移动到下一个控件。n AutoSize获取或设置一个值,通过该值指示当分配给控件的字体发生更改时,RichTextBox的大小是否自动调整。n DetectUrls 获取或设置一个值,通过该值指示当在控件中输入某个统一资源定位符(URL) 时,RichTextBox是否自动设置URL的格式。n Lines获取或设置文本框控件中的文本行。n RightMargin获取或设置RichTextBox控件内单个文本行的大小。n ScrollBars获取或设置RichTextBox控件中显示的滚动条类型。n SelectedRtf获取或设置控件中当前选定的RTF格式的格式化文本。n SeleetedText获取或设置RichTextBox内的选定文本。n SelectionBullet获取或设置一个值,通过该值指示项目符号样式是否应用到当前选定内容或插入点。n SelectionColor获取或设置当前选定文本或插入点的文本颜色。n SelectionFont获取或设置当前选定文本或插入点的字体。n SelectionLength获取或设置控件中选定的字符数。n SeleetionStart获取或设置文本框中选定的文本起始点。(2)公共方法:n Clear从文本框控件中清除所有文本。n Cut将文本框中当前选定的内容剪切到剪贴板上。n Copy将文本框中的当前选定内容复制到剪贴板上。n LoadFile将文件的内容加载到RichTextBox控件中。n Paste将剪贴板的内容粘贴到控件中。n SaveFile将RichTextBox的内容保存到文件中。(3)公共事件:n ImeChange 当在中文版的Windows操作系统上切换输入方法时发生。n LinkClicked 当用户在控件文本内的链接上单击时发生。n SelectionChanged 控件内的选定文本更改时发生。n TabStopChanged TabStop属性值更改时发生。n VScroll 当用户单击控件的垂直滚动条时发生。 RichTextBox控件实例支持的功能之一就是能读写文本和RTF文件,利用了公共方法LoadFile()和SaveFile(),其语法形式如下所示。LoadFile(string path,RichTextBoxStreamType filetype);SaveFile(string path,RichTextBoxStreamType filetype); 其中path参数包含了要打开或保存文件的文件夹和文件名。有关功能都内置到RichTextBox控件中。可选的filetype枚举定义LoadFile()或者SaveFile()方法如何解释件的内容。rtbText.LoadFile(“C:/demo.rtf”,RichTextBoxStreamType.RichText);此句代码可以使用RichTextBox来读取c盘根目录下的文件demo.rtf。rtbText.SaveFile(“C:/demo.rtf”,RichTextBoxStreamType.RichText);此句代码可以实现使用RichTextBox将文件demo.rtf保存到c盘根目录下。需要注意的是,如果试图以富文本框来打开一个文件,而文件格式不是RTF时,就会发生System.ArgumentException异常。 8、为“文件”|“打开”菜单项添加代码: (1)首先将子窗体的RichTextBox控件的可访问性(Modifier)修改成Public 初始值为private (2)增加全局变量: public bool isOpen; /标志变量,记录文件是“打开”|“新建” 修改父、子窗体构造函数:public bool isOpen; /标识变量,记录当前文档是新建还是打开的public frmMdiFather() InitializeComponent(); windowCount+; string caption=”文档”+windowCount; frmChild doc = new frmChild(this,caption,false); doc.Show(); 同时修改“文件”|“新建”菜单,代码参考父窗体构造函数/子窗体构造函数 public frmChild(frmMdiFather parent,string caption, bool isOpen) InitializeComponent(); this.MdiParent = parent; this.Text = caption; this.isOpen = isOpen; 为父窗体的“文件”|“打开”菜单添加事件处理函数 /“文件” “打开”菜单事件处理函数 private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) OpenFileDialog oplg = new OpenFileDialog(); oplg.Filter = 格式文档 (*.rtf)|*.rtf|纯文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*; DialogResult dlgrs; dlgrs=oplg.ShowDialog(); if (dlgrs != DialogResult.Cancel) try /将文件名(包括路径)传给子窗体,用来作为标题,并为保存文件时使用 string name = oplg.FileName; /创建子窗体实例 frmChild frm = new frmChild(this,name,true); frm.Show(); if (dlgrs = DialogResult.OK) RichTextBoxStreamType fileType; /根据筛选器确定要打开的文件类型 switch (oplg.FilterIndex) case 1: fileType = RichTextBoxStreamType.RichText; break; case 2: fileType = RichTextBoxStreamType.PlainText; break; default: fileType = RichTextBoxStreamType.UnicodePlainText; break; RichTextBox theBox = (RichTextBox)frm.ActiveControl; theBox.LoadFile(oplg.FileName, fileType); catch (Exception) MessageBox.Show(由于格式错误暂时打不开该文件!, 错误, MessageBoxButtons.OK); 23、为“文件”|“另存为”菜单项添加代码:设置全局变量textChanged,用于存储文本框中的文字是否发生变化,从而此变量在关闭窗体时用于判断是否弹出对话框。public bool textChanged = false;为richTextBox1添加事件处理函数private void richTextBox1_TextChanged(object sender, EventArgs e) textChanged = true; /“文件”“另存为”菜单事件处理函数 private void MenuSave_Click(object sender, EventArgs e) SaveFileDialog savedlg = new SaveFileDialog(); savedlg.Filter = 格式文档 (*.rtf)|*.rtf|纯文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*; DialogResult dlgResult; dlgResult = savedlg.ShowDialog(); frmChild frm = (frmChild)this.ActiveMdiChild; RichTextBox theBox = (RichTextBox)frm.ActiveControl; if (dlgResult = DialogResult.OK) theBox.SaveFile(savedlg.FileName, RichTextBoxStreamType.RichText); this.Text = savedlg.FileName; /Textchanged = false; 声明两个方法成员 /如果文件是“打开”菜单打开的,即已知文件的路径,则直接保存至原路径, /如果文件是“新建”菜单打开的,则需弹出保存文件对话框来选择保存的路径 private void _Save() /如果文件是“打开”菜单打开的,即已知文件的路径,则直接保存至原路径 if (isOpen) string fileType = this.Text.Substring(this.Text.LastIndexOf(.) + 1); switch (fileType) case rtf: rtbText.SaveFile(this.Text, RichTextBoxStreamType.RichText); break; case txt: rtbText.SaveFile(this.Text, RichTextBoxStreamType.PlainText); break; default: rtbText.SaveFile(this.Text, RichTextBoxStreamType.UnicodePlainText); break; Textchanged = false; /如果文件是“新建”菜单打开的,则需弹出保存文件对话框来选择保存的路径 else saveAs(); /另存文件方法,调用的时机是点击“另存为”菜单或者要保存新建的文件时 private void saveAs() SaveFileDialog sa = new SaveFileDialog(); sa.Filter = 格式文档 (*.rtf)|*.rtf|纯文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*; DialogResult dlg; dlg = sa.ShowDialog(); if (dlg = DialogResult.OK) switch (sa.FilterIndex) case 1: rtbText.SaveFile(sa.FileName, RichTextBoxStreamType.RichText); break; case 2: rtbText.SaveFile(sa.FileName, RichTextBoxStreamType.PlainText); break; case 3: rtbText.SaveFile(sa.FileName, RichTextBoxStreamType.UnicodePlainText); break; this.Text = sa.FileName; Textchanged = false; 修改事件处理函数: /“文件”|“保存”菜单事件处理函数 private void MenuCFileSave_Click(object sender, EventArgs e) this._Save(); /“文件”|“另存为”菜单事件处理函数 private void MenuCFilesaveas_Click(object sender, EventArgs e) saveAs(); C:Documents and SettingsAdministrator桌面MDI多窗体应用程序*.rtf(2)格式化富文本框 24、设置颜色:使用ColorDialog控件,设置RichTextBox.SelectionColor属性 为“背景”菜单项添加代码: /自定义方法,设置文本框的字体颜色 private void setColor() ColorDialog cl = new ColorDialog(); DialogResult dlg = cl.ShowDialog(); if (dlg = DialogResult.OK) richTextBox1.SelectionColor = cl.Color; /“格式”|“颜色”菜单事件处理函数 private void MenuEditColor_Click(object sender, EventArgs e) this.setColor(); 25、设置字体:使用FontDialog控件,设置RichTextBox.SelectionFont属性/自定义方法,设置文本框的字体 private void setFont() FontDialog fn = new FontDialog(); DialogResult dlg = fn.ShowDialog(); if (dlg = DialogResult.OK) richTextBox1.SelectionFont = fn.Font; /“格式”|“字体”菜单事件处理函数 private void MenuEditFont_Click(object sender, EventArgs e) this.setFont(); 26、实现“格式”字体加粗、斜体和下划线的效果:/上下文菜单中的“粗体”事件处理函数 private void ContextMenuBold_Click(object sender, EventArgs e) Font newfont = new Font(rtbText.SelectionFont, (rtbText.SelectionFont.Bold ? rtbText.SelectionFont.Style & FontStyle.Bold : rtbText.SelectionFont.Style | FontStyle.Bold); rtbText.SelectionFont = newfont; /上下文菜单中的“斜体”事件处理函数 private void ContextMenuItalic_Click(object sender, EventArgs e) Font newfont = new Font(rtbText.SelectionFont, (rtbText.SelectionFont.Italic ? rtbText.SelectionFont.Style & FontStyle.Italic : rtbText.SelectionFont.Style | FontStyle.Italic); rtbText.SelectionFont = newfont; /上下文菜单中的“下划线”事件处理函数 private void ContextMenuUnderline_Click(object sender, EventArgs e) Font newfont = new Font(rtbText.SelectionFont, (rtbText.SelectionFont.Underline ? rtbText.SelectionFont.Style & FontStyle.Underline : rtbText.SelectionFont.Style | FontStyle.Underline); rtbText.SelectionFont = newfont; “复制”、“剪切”及“粘贴”菜单项事件处理函数/“编辑”|“复制”菜单事件处理函数 private void MenuEditCopy_Click(object sender, EventArgs e) rtbText.Copy(); /“编辑”|“剪切”菜单事件处理函数 private void MenuEditCut_Click(object sender, EventArgs e) rtbText.Cut(); /“编辑”|“粘贴”菜单事件处理函数 private void MenuEditPaste_Click(object sender, EventArgs e) rtbText.Paste(); 其他“格式”菜单项事件处理函数/“格式”|“撤销”菜单事件处理函数 private void MenuEditUndo_Click(object sender, EventArgs e) rtbText.Undo(); /“格式”|“再做一次”菜单事件处理函数 private void MenuEditRedo_Click(object sender, EventArgs e) rtbText.Redo(); private void 左对齐ToolStripMenuItem_Click(object sender, EventArgs e) rtbText.SelectionAlignment = HorizontalAlignment.Center; 27、完成上下文菜单编辑功能:代码见项目28、缩放文档RichTextBox.ZoomFactor属性 (自己完成)/创建委托,用来处理缩放 private void setZoom() this.MenuZoom75.Click+=new EventHandler(MenuZoom_Click); /缩放事件处理函数,所有子菜单项共用 private void MenuZoom_Click(object sender, EventArgs e) ToolStripMenuItem mi = (ToolStripMenuItem)sender; switch (mi.Text) case 75%: this.rtbText.ZoomFactor = 0.75f; break; case 100%: this.rtbText.ZoomFactor=1f; break; case 125%: this.rtbText.ZoomFactor=1.25f; break; case 150%: this.rtbText.ZoomFactor=1.5f; break; case 200%: this.rtbText.ZoomFactor=2f; break; 四、标准窗体和MDI应用程序 模态对话框和非模态对话框10、添加帮助|关于 菜单项 设置Name属性(MenuAbout)11、添加Windows窗体,设置Name属性为About 添加RichTextBox控件,Text属性=MDI标准窗体关于对话框 设置字体颜色和背景颜色 ReadOnly=true12、为“关于”菜单添加代码:/打开“关于”窗体 private void MenuAbout_Click(object sender, EventArgs e) About newf = new About(); newf.ShowDialog(); 为菜单设置图片(textimageRelation)五、菜单和MDI应用程序13、依照表1和表2设置父窗体和子窗体的菜单(1)合并菜单表 1 父窗体菜单设置菜单 Name Text MergeAction MergeIndex文件 MenuFile 文件 MatchOnly 0窗口 MenuWindow 窗口 insert 4帮助 MenuHelp 帮助 insert 5 表 2 子窗体菜单设置菜单 Name Text MergeAction MergeIndex 文件 MenuFile1 文件 MatchOnly 0 编辑 MenuEdit 编辑 insert 2缩放 MenuZoom 缩放 insert 3说明:MergeAction属性,定义一个菜单是否可以替换另一个菜单,一个菜单是否添加到另外一个菜单中,以及两个菜单中的菜单项是否能够合并在一起。MergeIndex属性应用于菜单项,它包含一个整型值。该值由菜单和菜单项用来指示两个菜单或菜单项全新的相对次序。(2)合并菜单项分别创建父窗体和子窗体的菜单,并更改其属性,如表3和4所示表 3 父窗体“文件”菜单及其属性菜单 Name Text MergeAction MergeIndex文件 MenuFile 文件 MatchOnly 0 新建 MenuNew 新建 insert 0 打开 MenuOpen 打开 insert 1 分割线 - insert 2退出程序 MenuExit 退出 insert 7表 4 子窗体“文件”菜单及其属性菜单 Name Text MergeAction MergeIndex文件 MenuFile1 文件 MatchOnly 0保存 MenuSave 保存 insert 3另存为 MenuSaveAs 另存为 insert 4分割线 - insert 5关闭当前 MenuClose 关闭当前 insert 6 14、添加上下文菜单控件,Name=ContextMenuEdit15、添加子菜单项上下文菜单: 剪切 Name=ContextMenuCut复制 Name=ContextMenuCopy粘贴 Name=ContextMenuPaste加粗 Name=ContextMenuBold斜体 Name=ContextMenuItliac下划线 Name=ContextMenuUnderline颜色 Name=ContextMenuColor字体 Name=ContextMenuFont16、设置RichTextBox控件的ContextMenu属性为ContextMenuEdit。为上下文菜单绑定事件处理函数,略。六、MDI窗体事件(1)Closing事件父窗体和子窗体都具有closing事件,但关闭子窗体时,仅触发该子窗体的closing事件,而关闭父窗体时,closing事件将首先触发每个打开的子窗体的closing事件,其中任何一个被取消时,Windows将停止触发后续的closing事件,当closing事件为所有的子窗体触发之后,将为父窗体触发。(2)TextChanged事件检测子窗体上的RichTextBox控件文本内容是否被更改。父窗体关闭时,父窗体的closing事件获得用户确认退出的解决方案。子窗体的closing事件处理程序检测子窗体上的文本内容是否被修改,如果是将弹出对话框,询问用户是要保存、放弃修改或取消closing事件。17、添加全局变量 public bool Textchanged=false;添加TextChanged事件处理程序 bool Textchanged=true;18、为子窗体MDIChild添加FormClosing事件处理程序:/子窗体关闭事件处理函数 private void MDIChild_FormClosing(object sender, FormClosingEventArgs e)/当窗体被关闭前,判断文档是否被修改,并提示保存 if (Textchanged) /创建一个“保存文件对话框”的实例 SaveFileDialog savedlg = new SaveFileDialog(); savedlg.Filter = 格式文档(*.rtf)|*.rtf|纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*; /用来保存对话框的返回值,枚举类型 DialogResult dlgResult; /关闭窗口时弹出对话框,根据用户选择决定“保存”|“放弃修改”|“取消” if (Textchanged = true) dlgResult = MessageBox.Show(文档已经被修改,保存吗?, 确认, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); switch (dlgResult) case DialogResult.Yes: this._Save(); break; case DialogResult.No: break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论