4个回答
展开全部
一、实现MDI
1、创建父窗体,设置其Name、Text、IsMdiContainer属性
2、创建子窗体,设置其Name属性
3、为父窗体添加构造函数:
public MdiFather()
{
InitializeComponent();
MdiChild child = new MdiChild(this);
child.Show();
}
4、为子窗体添加构造函数:
public MdiChild(MdiFather parent)
{
InitializeComponent();
this.MdiParent = parent;
}
二、添加菜单和RichTextBox控件
5、为父窗体添加主菜单
文件|新建、打开、退出,并修改其Name属性(MunuFile和MenuNew)
6、为子窗体添加RichTextBox控件,并设置其Anchor属性
7、为“新建”菜单添加事件处理函数:
private void MenuNew_Click(object sender, EventArgs e)
{
string caption;
caption = "新建文档"
MdiChild child = new MdiChild(this, caption);
child.Show();
}
8、修改子窗体构造函数:
public MdiChild(MdiFather parent,string caption)
{
InitializeComponent();
this.MdiParent = parent;
this.Text = caption;
}
同时修改父窗体的构造函数:
private int
numberoftext = 2;//构造函数
public MdiFather()
{
string caption;
caption = "新建文档" + numberoftext++;
InitializeComponent();
MdiChild child = new MdiChild(this,caption);
child.Show();
}
9、为了在子窗体的标题栏中显示打开文档的数量,修改父窗体“新建”菜单事件处理函数
public MdiFather()
{
string caption;
caption = "新建文档" + numberoftext++;
InitializeComponent();
MdiChild child = new MdiChild(this,caption);
child.Show();
}
三、标准窗体和MDI应用程序
模态对话框和非模态对话框
10、添加帮助|关于 菜单项 设置Name属性(MenuAbout)
11、添加Windows窗体,设置Name属性为About
添加RichTextBox控件,Text属性="MDI标准窗体'关于'对话框
设置字体颜色和背景颜色
ReadOnly="true"
12、为“关于”菜单添加代码:
//打开“关于”窗体
private void
MenuAbout_Click(object sender, EventArgs e)
{
About newf = new About();
newf.Text = "关于对话框";
newf.ShowDialog();
}
四、菜单和MDI应用程序
13、依照P244表10-1和表10-2设置父窗体和子窗体的菜单
(1)合并菜单
父窗体菜单设置
菜单
Name
Text MergeOrder
MergeType
文件
MenuFile
文件
1 MergeItems
帮助
MenuHelp
帮助
5
ADD
子窗体菜单设置
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile1
文件
1 MergeItems
编辑
MenuEdit
编辑
2 ADD
窗口
MenuWindows
窗口
3 ADD
缩放
MenuZoom
缩放
4
ADD
说明:MergeOrder属性应用于菜单项,它包含一个整型值。该值由菜单和菜单项用来指示两个菜单或菜单项全新的相对次序。
MergeType属性和MergeOrder属性一起作用,定义一个菜单是否可以替换另一个菜单,一个菜单是否添加到另外一个菜单中,以及两个菜单中的菜单项是否能够合并在一起。
(2)合并菜单项
分别创建父窗体和子窗体的菜单,并更改其属性。
父窗体“文件”菜单及其属性
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile
文件
1 MergeItems
新建
MenuNew
新建
1
MergeItems
打开
MenuOpen
打开
2 MergeItems
退出
MenuExit
退出
5
MergeItems
子窗体“文件”菜单及其属性
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile1
文件
1 MergeItems
保存
MenuSave 保存
3
MergeItems
关闭
MenuClose
关闭
4
MergeItems
14、添加上下文菜单控件,Name=ContextMenuEdit
15、添加子菜单项
上下文菜单:
剪切 Name=ContextMenuCut
复制 Name=ContextMenuCopy
粘贴 Name=ContextMenuPaste
加粗 Name=ContextMenuBold
斜体 Name=ContextMenuItliac
下划线 Name=ContextMenuUnderline
颜色 Name=ContextMenuColor
字体 Name=ContextMenuFont
16、设置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添加Closing事件处理程序:
//窗体关闭事件
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();
save()
break;
case DialogResult.No:
break;
case DialogResult.Cancel:
e.Cancel = true; //取消事件
break;
}
}
}
}
19、为父窗体MDIFather添加Closing事件:
//父窗体关闭事件
private void
MDIFather_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dlgResult;
dlgResult = MessageBox.Show("退出程序吗?", "请确认", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (dlgResult == DialogResult.No)
e.Cancel = true;
}
20、为父窗体中的“退出”菜单和子窗体中的“关闭”菜单添加事件处理函数:
this.Close();
Application.Exit();
六、管理MDI子窗体
(1)排列子窗体
Layout(MdiLayout)枚举值
21、为“水平排列”和“垂直排列”菜单项添加事件处理函数:
//“编辑”|“垂直排列”菜单事件处理函数
private void
MenuCWinV_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}
//“编辑”|“水平排列”菜单事件处理函数
private void
MenuCWinH_Click_1(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
//“编辑”|“层叠排列”菜单事件处理函数
private void
MenuCWinC_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
(2)使用菜单选择MDI子窗体
让用户方便地在不同的MDI子窗体之间导航。
设置“窗口”菜单项的MdiList属性为true即可。
2005操作方法:将子窗体的“窗口”菜单挪到父窗体中,设置主菜单控件的MdiWindowListItem属性为“窗口”菜单(MenuItemWindows)。
七、RichTextBox控件
URL(统一资源定位符):
协议://路径(IP)/文件名
1、创建父窗体,设置其Name、Text、IsMdiContainer属性
2、创建子窗体,设置其Name属性
3、为父窗体添加构造函数:
public MdiFather()
{
InitializeComponent();
MdiChild child = new MdiChild(this);
child.Show();
}
4、为子窗体添加构造函数:
public MdiChild(MdiFather parent)
{
InitializeComponent();
this.MdiParent = parent;
}
二、添加菜单和RichTextBox控件
5、为父窗体添加主菜单
文件|新建、打开、退出,并修改其Name属性(MunuFile和MenuNew)
6、为子窗体添加RichTextBox控件,并设置其Anchor属性
7、为“新建”菜单添加事件处理函数:
private void MenuNew_Click(object sender, EventArgs e)
{
string caption;
caption = "新建文档"
MdiChild child = new MdiChild(this, caption);
child.Show();
}
8、修改子窗体构造函数:
public MdiChild(MdiFather parent,string caption)
{
InitializeComponent();
this.MdiParent = parent;
this.Text = caption;
}
同时修改父窗体的构造函数:
private int
numberoftext = 2;//构造函数
public MdiFather()
{
string caption;
caption = "新建文档" + numberoftext++;
InitializeComponent();
MdiChild child = new MdiChild(this,caption);
child.Show();
}
9、为了在子窗体的标题栏中显示打开文档的数量,修改父窗体“新建”菜单事件处理函数
public MdiFather()
{
string caption;
caption = "新建文档" + numberoftext++;
InitializeComponent();
MdiChild child = new MdiChild(this,caption);
child.Show();
}
三、标准窗体和MDI应用程序
模态对话框和非模态对话框
10、添加帮助|关于 菜单项 设置Name属性(MenuAbout)
11、添加Windows窗体,设置Name属性为About
添加RichTextBox控件,Text属性="MDI标准窗体'关于'对话框
设置字体颜色和背景颜色
ReadOnly="true"
12、为“关于”菜单添加代码:
//打开“关于”窗体
private void
MenuAbout_Click(object sender, EventArgs e)
{
About newf = new About();
newf.Text = "关于对话框";
newf.ShowDialog();
}
四、菜单和MDI应用程序
13、依照P244表10-1和表10-2设置父窗体和子窗体的菜单
(1)合并菜单
父窗体菜单设置
菜单
Name
Text MergeOrder
MergeType
文件
MenuFile
文件
1 MergeItems
帮助
MenuHelp
帮助
5
ADD
子窗体菜单设置
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile1
文件
1 MergeItems
编辑
MenuEdit
编辑
2 ADD
窗口
MenuWindows
窗口
3 ADD
缩放
MenuZoom
缩放
4
ADD
说明:MergeOrder属性应用于菜单项,它包含一个整型值。该值由菜单和菜单项用来指示两个菜单或菜单项全新的相对次序。
MergeType属性和MergeOrder属性一起作用,定义一个菜单是否可以替换另一个菜单,一个菜单是否添加到另外一个菜单中,以及两个菜单中的菜单项是否能够合并在一起。
(2)合并菜单项
分别创建父窗体和子窗体的菜单,并更改其属性。
父窗体“文件”菜单及其属性
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile
文件
1 MergeItems
新建
MenuNew
新建
1
MergeItems
打开
MenuOpen
打开
2 MergeItems
退出
MenuExit
退出
5
MergeItems
子窗体“文件”菜单及其属性
菜单
Name
Text
MergeOrder MergeType
文件
MenuFile1
文件
1 MergeItems
保存
MenuSave 保存
3
MergeItems
关闭
MenuClose
关闭
4
MergeItems
14、添加上下文菜单控件,Name=ContextMenuEdit
15、添加子菜单项
上下文菜单:
剪切 Name=ContextMenuCut
复制 Name=ContextMenuCopy
粘贴 Name=ContextMenuPaste
加粗 Name=ContextMenuBold
斜体 Name=ContextMenuItliac
下划线 Name=ContextMenuUnderline
颜色 Name=ContextMenuColor
字体 Name=ContextMenuFont
16、设置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添加Closing事件处理程序:
//窗体关闭事件
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();
save()
break;
case DialogResult.No:
break;
case DialogResult.Cancel:
e.Cancel = true; //取消事件
break;
}
}
}
}
19、为父窗体MDIFather添加Closing事件:
//父窗体关闭事件
private void
MDIFather_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dlgResult;
dlgResult = MessageBox.Show("退出程序吗?", "请确认", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (dlgResult == DialogResult.No)
e.Cancel = true;
}
20、为父窗体中的“退出”菜单和子窗体中的“关闭”菜单添加事件处理函数:
this.Close();
Application.Exit();
六、管理MDI子窗体
(1)排列子窗体
Layout(MdiLayout)枚举值
21、为“水平排列”和“垂直排列”菜单项添加事件处理函数:
//“编辑”|“垂直排列”菜单事件处理函数
private void
MenuCWinV_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}
//“编辑”|“水平排列”菜单事件处理函数
private void
MenuCWinH_Click_1(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
//“编辑”|“层叠排列”菜单事件处理函数
private void
MenuCWinC_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
(2)使用菜单选择MDI子窗体
让用户方便地在不同的MDI子窗体之间导航。
设置“窗口”菜单项的MdiList属性为true即可。
2005操作方法:将子窗体的“窗口”菜单挪到父窗体中,设置主菜单控件的MdiWindowListItem属性为“窗口”菜单(MenuItemWindows)。
七、RichTextBox控件
URL(统一资源定位符):
协议://路径(IP)/文件名
展开全部
if (frmInfo == null || frmInfo.IsDisposed)
{
frmInfo = new FrmInfo();
}
frmInfo.MdiParent = this;
this.SuspendLayout();
frmInfo.Show();
frmInfo.WindowState = FormWindowState.Maximized;
this.ResumeLayout();
this.PerformLayout();
frmInfo.ResumeLayout();
试试这个
{
frmInfo = new FrmInfo();
}
frmInfo.MdiParent = this;
this.SuspendLayout();
frmInfo.Show();
frmInfo.WindowState = FormWindowState.Maximized;
this.ResumeLayout();
this.PerformLayout();
frmInfo.ResumeLayout();
试试这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是C#的代码!属于多文档界面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询