多文档MDI窗体

来源:互联网 发布:天网 软件 编辑:程序博客网 时间:2024/06/09 22:51

多文档窗体是一种应用非常广泛的窗体类型,即在主窗体中包含多个子窗体,并且子窗体不会显示在主窗体的外面。当子窗体不能完全显示在主窗体中时,主窗体会显示滚动条来调整可视范围。 程序运行后,单击“文件——新建”命令(快捷键: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 0
原创粉丝点击