多文档MDI窗体


多文档窗体是一种应用非常广泛的窗体类型,即在主窗体中包含多个子窗体,并且子窗体不会显示在主窗体的外面。当子窗体不能完全显示在主窗体中时,主窗体会显示滚动条来调整可视范围。 程序运行后,单击“文件——新建”命令(快捷键:ctrl+N),就可以新建子窗体,如果在主窗体中同时有多个子窗体时,可以利用“窗口”菜单来管理。单击“窗口——层叠”命令,就可以层叠所有子窗体,单击“窗口——横向平铺”命令,就可以横向平铺子窗体,单击“窗口——竖向平铺”命令,就可以竖向平铺子窗体。此外还有“打开”、“保存”、“字体”、“页面设置”、“打印预览”等功能。
制作要点:

1、窗体的IsMdiCotainer属性的应用。

2.下拉菜单MenuStrip控件的应用。

3.状态栏StatusStrip控件的应用。
4.打开对话框OpenFileDialog和保存对话框SaveFileDialog的应用。
5.页面设置对话框PageSetupDialog和页面打印控件PrintDocument的应用。
6.打印预览对话框PrintPreviewDialog的应用。
7.字体对话框FontDialog的应用。
8.日期时间对象DateTime的应用。
9.RichTextBox控件的应用。
10.剪贴板对象Clipboard的应用。

11.字符串流对象StringReader的应用。

制作步骤:
1.新建一个Windows窗体应用程序。设置"Text"属性为“MDI应用程序”,为了把该窗体变成多文档(MDI)应用程序的主窗体,就要把窗体的"IsMdiContainer"属性为"True"(注意,只有把普通窗体的IsMdiContainer属性设置为True,才能把窗体变成主窗体,才能设置其他窗体的MdiParent属性为该窗体)。

2.添加MenuStrip控件,在菜单栏中输入“文件(F)”,依次添加如下图:



3.如果要设置菜单的快捷键,只须设置菜单的"ShortcutKeys"属性即可。
4.添加"StatusStrip"控件,添加状态栏。单击左下角的下拉按钮,选择"StatusLabel"命令,在这里添加1个状态栏标签。设置其"Text"为“当前日期:”如图:




5.为了实现文件的动态打开。添加OpenFileDialog控件,为了实现文件的动态保存,添加SaveFileDialog控件。为了实现文件的页面设置功能,要添加PageSetupDialog控件和PrintDocument控件,要实现文件打开预览功能,要添加PrintPreviewDialog控件。为了实现选择文本的格式化设置,要添加FontDialog控件。
6。添加一个子窗体,“项目——添加Windows窗体”,设置其"Text"属性为“子窗体”,单击工具箱中的RichTextBox控件,然后按下鼠标左键在窗体上绘制,就可以添加到应用程序中。为了使其能充满整个窗体,设置"Dock"属性为"Fill",最后设置"Modifiers"属性为"Public",这样在现今Form2窗体对象实例时就可以利用该RichTextBox控件了。

添加代码:
1.双击Form1窗体,导入Sysem.IO命名空间:
using System.IO();
2.定义公用变量:

</pre><pre name="code" class="html">
//新建Form2对象实例
        Form2 myf = new Form2();
        //字符串流对象,一行一行读取文本
        public StringReader MySreader;
        //记录新建子窗体个数
        public int x = 1;


3.双击窗体,添加:

private void Form1_Load(object sender, EventArgs e)
        {
            //显示当前日期与时间
            toolStripStatusLabel2.Text = "  当前日期:  " + DateTime.Now.ToString();
        }
4.单击菜单栏总的“新建”等各个命令,添加代码如下:

private void 新建NCtrlNToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 myf = new Form2();
            //设置为子窗体
            myf.MdiParent = this;
            //设置子窗体的标题
            myf.Text = "新建文件" + x.ToString();
            //状态栏提示信息
            toolStripStatusLabel1.Text = "状态:新建文档";
            x = x + 1;
            //显示子窗体
            myf.Show();
        }
        private void 打开OCtrlOToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //设置打开对话框的文件类型
            openFileDialog1.Filter = "*.txt|*.txt";
            //设置打开对话框的标题
            openFileDialog1.Title = "打开";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //提取打开文件的文件名
                string strname = openFileDialog1.FileName;
                //设置子窗体文件名
                myf.Text = openFileDialog1.FileName;
                //打开文件
                myf.richTextBox1.Clear();
                myf.richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                //设置窗体为子窗体
                myf.MdiParent = this;
                //显示子窗体
                myf.Show();
                //状态栏提示信息
                toolStripStatusLabel1.Text = toolStripStatusLabel1.Text + "打开文件";
            }
        }
        private void 保存SCtrlSToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //设置保存对话框类型
            saveFileDialog1.Filter = "文本文件(*txt)|.txt";
            saveFileDialog1.FilterIndex = 2;
            //保存文件
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                myf.richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText);
            }
        }
        private void 页面设置VToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //页面设置的内容
            pageSetupDialog1.Document = this.printDocument1;
            //页面设置对话框
            pageSetupDialog1.ShowDialog();
        }
要实现打开预览功能,首先双击printDocument1控件,添加:
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Graphics frmGraphics = e.Graphics;
            //设置字体类型
            Font frmFont = myf.richTextBox1.Font;
            //每一页的行数
            float intpage = e.MarginBounds.Height;
            frmFont.GetHeight(frmGraphics);
            //打印的行数计数
            int intPratn = 0;
            //打印时的纵坐标
            float fYposition = 0;
            float fLeft = e.MarginBounds.Left;
            float fTop = e.MarginBounds.Top;
            string strfrmling = "";
            while((intPratn<intpage)&&(strfrmling=MySreader.ReadLine())!=null)
            {
                fYposition = fTop + intPratn * frmFont.GetHeight(frmGraphics);
                frmGraphics.DrawString(strfrmling,frmFont,new SolidBrush(Color.Black),fLeft,fYposition,new StringFormat());
                intPratn++;
            }
            if (strfrmling != null)
            {
                //没有打印完发出下一页打印事件
                e.HasMorePages = true;
            }
            else
            {
                e.HasMorePages = false;
            }
        }
其他命令:
 private void 打印预览PToolStripMenuItem_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.Document = printDocument1;
            //打印预览内容
            MySreader = new StringReader(myf.richTextBox1.Text);
            try
            {
                //打印预览对话框
                printPreviewDialog1.ShowDialog();
            }
            catch
            {
                printDocument1.PrintController.OnEndPrint(printDocument1,new System.Drawing.Printing.PrintEventArgs());
            }
        }
        private void 退出QToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
            Application.Exit();
        }
        private void 剪切TToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int CutInt = myf.richTextBox1.SelectionStart;
            Clipboard.SetDataObject(myf.richTextBox1.SelectedText);
            myf.richTextBox1.Text = myf.richTextBox1.Text.Substring(0, CutInt) + myf.richTextBox1.Text.Substring(CutInt,myf.richTextBox1.SelectedText.Length);
            myf.richTextBox1.SelectionStart = CutInt;
        }
        private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //复制选择文本
            Clipboard.SetDataObject(myf.richTextBox1.SelectedText);
        }
        private void 粘贴PToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IDataObject idat = Clipboard.GetDataObject();
            if (idat.GetDataPresent(DataFormats.Text))
            {
                string PasteStr = (string)idat.GetData(DataFormats.Text);
                int pasteid = myf.richTextBox1.SelectionStart;
                myf.richTextBox1.Text = myf.richTextBox1.Text.Substring(0, pasteid) + PasteStr + myf.richTextBox1.Text.Substring(pasteid);
                myf.richTextBox1.SelectionStart = pasteid + PasteStr.Length;
            }
        }
        private void 全选AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //全选文本
            myf.richTextBox1.SelectAll();
        }
        private void 字体FToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fontDialog1.ShowDialog();
            fontDialog1.AllowVerticalFonts = true;
            fontDialog1.FixedPitchOnly = true;
            fontDialog1.ShowApply = true;
            fontDialog1.ShowEffects = true;
            if (myf.richTextBox1.SelectedText == "")
            {
                //设置所有文本字体属性
                myf.richTextBox1.Font = fontDialog1.Font;
            }
            else
            {
                //设置选择文本字体属性
                myf.richTextBox1.SelectionFont = fontDialog1.Font;
            }
        }
        private void 层叠AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.Cascade);
        }
        private void 横向平铺FToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileHorizontal);
        }
        private void 竖向平铺HToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileVertical);
        }
        private void 图标排列TToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.ArrangeIcons);
        }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值