winform应用【MDI、SDI】、创建资源管理器案例
一、创建MDI应用 MDI:Multiple Document Interface 就是有一个主窗体和N个子窗体 主窗体: 1.设置IsMdiContainer属性为True 2.使用ActiveMdiChild获取当前活动的子窗体 3.使用MdiChildren获取所有的子窗体 4.使用LayoutMdi改变子窗体布局 子窗体: 1.设置MdiParent属性为主窗体 2.使用MdiParent获取主窗体
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mdi { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } /// <summary> /// 创建子窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void newToolStripMenuItem_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(); childForm.MdiParent = this; childForm.Show(); } } }
二、Mdi应用(窗体布局)
三、双击菜单项(Cascade、The Horizontally、The Vertically),写入单击事件:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mdi { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } /// <summary> /// 创建子窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void newToolStripMenuItem_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(); childForm.MdiParent = this; childForm.Show(); } /// <summary> /// 层叠布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } /// <summary> /// 横向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theHorizontallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } /// <summary> /// 竖向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theVerticallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileVertical); } } }
三、Mdi应用(编辑菜单)
三、双击菜单项,完成菜单项的单击事件:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mdi { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } /// <summary> /// 创建子窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void newToolStripMenuItem_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(); childForm.MdiParent = this; childForm.Show(); } /// <summary> /// 层叠布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } /// <summary> /// 横向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theHorizontallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } /// <summary> /// 竖向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theVerticallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileVertical); } /// <summary> /// 上一步 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void undoToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Undo(); } } /// <summary> /// 下一步 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void redoToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Redo(); } } /// <summary> /// 剪切 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cutToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Cut(); } } /// <summary> /// 复制 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void copyToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Copy(); } } /// <summary> /// 粘贴 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pasteToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Paste(); } } } }
四、Mdi应用(文件管理菜单)
二、双击每一菜单项,写入单击事件代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mdi { public partial class MainForm : Form { int Count = 0;//记录子窗体的数量 Dictionary<string, string> FilePathDic = new Dictionary<string, string>();//记录窗体的保存路径 public MainForm() { InitializeComponent(); } /// <summary> /// 创建子窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void newToolStripMenuItem_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(); childForm.MdiParent = this; childForm.Text = "子窗体" + (++Count); childForm.Show(); } /// <summary> /// 层叠布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } /// <summary> /// 横向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theHorizontallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } /// <summary> /// 竖向布局 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void theVerticallyToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileVertical); } /// <summary> /// 上一步 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void undoToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Undo(); } } /// <summary> /// 下一步 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void redoToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Redo(); } } /// <summary> /// 剪切 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cutToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Cut(); } } /// <summary> /// 复制 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void copyToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Copy(); } } /// <summary> /// 粘贴 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pasteToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.Paste(); } } /// <summary> /// 全选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.richTextBox1.SelectAll(); } } /// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void saveToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; string title = childForm.Text; string path = string.Empty; //判断是否已经保存过 if (FilePathDic.ContainsKey(title)) { path = FilePathDic[title]; } if (string.IsNullOrEmpty(path)) { path = GetSavePath(); } if (!string.IsNullOrEmpty(path)) { childForm.richTextBox1.SaveFile(path); FilePathDic[title] = path; } } } /// <summary> /// 另存为 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; string title = childForm.Text; string path = GetSavePath(); if (!string.IsNullOrEmpty(path)) { childForm.richTextBox1.SaveFile(path); FilePathDic[title] = path; } } } /// <summary> /// 获取保存路径 /// </summary> /// <returns></returns> private string GetSavePath() { string path = string.Empty; var dialog = new SaveFileDialog(); dialog.Filter = "|*.rtf"; dialog.AddExtension = true; var result = dialog.ShowDialog(); if (result == DialogResult.OK) { path = dialog.FileName; } return path; } /// <summary> /// 关闭当前页面 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripMenuItem1_Click(object sender, EventArgs e) { if (this.ActiveMdiChild != null) { var childForm = (ChildForm)this.ActiveMdiChild; childForm.Close(); } } /// <summary> /// 关闭主窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void exitToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } /// <summary> /// 打开 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void openToolStripMenuItem_Click(object sender, EventArgs e) { var dialog = new OpenFileDialog(); dialog.Filter = "|*.rtf"; if (dialog.ShowDialog() == DialogResult.OK) { var title = "子窗体" + (++Count); ChildForm childForm = new ChildForm(); childForm.Text = title; childForm.MdiParent = this; childForm.richTextBox1.LoadFile(dialog.FileName); FilePathDic.Add(title, dialog.FileName); childForm.Show(); } } } }
五、Mdi应用(工具条)
一、SDI应用
一、新建一个解决方案,将menustrip和toolstrip拖入主窗体:
二、在SdiForm.cs里面写入如下代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Sdi { public partial class SdiForm : Form { public SdiForm() { InitializeComponent(); } public static int Count = 0;//记录窗体数量 /// <summary> /// 创建窗体 /// </summary> public static SdiForm CreateForm() { SdiForm form = new SdiForm(); form.Text = "窗体" + (++Count); //当前窗体设置为主窗体,及活动窗体 SdiApplication.Instance.ApplicationContext.MainForm = form; form.Show(); return form; } } }
四、添加类SdiApplication.cs,并在里面写入如下代码:
using Microsoft.VisualBasic.ApplicationServices; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sdi { public class SdiApplication : WindowsFormsApplicationBase { private static SdiApplication _instance = null; public static SdiApplication Instance { get { if (_instance == null) { _instance = new SdiApplication(); } return _instance; } } public SdiApplication() { this.IsSingleInstance = true;//单一进程,及无论开多少窗体,都只有一个进程 this.ShutdownStyle = ShutdownMode.AfterAllFormsClose;//关闭所有窗体后,关闭进程 } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) { SdiForm.CreateForm(); } protected override void OnCreateMainForm() { SdiForm.CreateForm(); } } }
五、更改Program.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Sdi { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); SdiApplication.Instance.Run(args); } } }
三、创建资源管理器案例
十、主窗体的Load事件加入如下代码:
/// <summary> /// 加载数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Explorer_Load(object sender, EventArgs e) { //设置ListView显示模式为默认时的列 this.listView1.Columns.Add("名称", 300); this.listView1.Columns.Add("修改时间",200); this.listView1.Columns.Add("大小",100); this.toolStripComboBox1.SelectedIndex = 0;//设置工具条上的ComboBox的默认选择 TreeNode root = new TreeNode("我的文档"); root.Tag = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//我的文档路径 AddNodes(root);//递归获取节点 this.treeView1.Nodes.Add(root);//将节点加载到树上 root.Expand();//展开根节点 } /// <summary> /// 获取子节点 /// </summary> /// <param name="node"></param> private void AddNodes(TreeNode node) { var dir = new System.IO.DirectoryInfo(node.Tag.ToString()); foreach (var childDir in dir.GetDirectories()) { //判断是否有权限访问 if (childDir.Attributes.HasFlag(FileAttributes.Hidden)) { continue; } TreeNode childNode = new TreeNode(childDir.Name); childNode.Tag = childDir.FullName; AddNodes(childNode); node.Nodes.Add(childNode); } }
十一、Combox的SelectedIndexChanged事件加入如下代码:
/// <summary> /// 更改ListView显示方式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e) { var text = this.toolStripComboBox1.Text; switch (text) { case "大图标": this.listView1.View = View.LargeIcon; break; case "小图标": this.listView1.View = View.SmallIcon; break; case "默认": this.listView1.View = View.Details; break; } }
十二、TreeView的AfterSelect事件加入如下代码:
/// <summary> /// 选中后的事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { var dir = new DirectoryInfo(e.Node.Tag.ToString()); this.listView1.Items.Clear();//清除listview的数据 foreach (var file in dir.GetFiles())//遍历目录 { ListViewItem item = new ListViewItem(file.Name); var lastWrite = file.LastWriteTime; //添加更新时间 item.SubItems.Add(lastWrite.ToShortDateString() + " " + lastWrite.ToShortTimeString()); //添加文件大小 item.SubItems.Add(Math.Ceiling(file.Length / 1024.0) + " KB"); //查看是否已经保存过该类型图片,如果没有,保存 if (!(this.bigImgList.Images.ContainsKey(file.Extension))) { var thisIcon = Icon.ExtractAssociatedIcon(file.FullName); this.smallImgList.Images.Add(file.Extension, thisIcon); this.bigImgList.Images.Add(file.Extension, thisIcon); } item.ImageKey = file.Extension; this.listView1.Items.Add(item); } }
来源:https://www.cnblogs.com/animal/p/3505797.html