一、创建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();
}
}
}
![]()
![]()
![]()
三、双击菜单项(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);
}
}
}
![]()
![]()
![]()
![]()
![]()
![]()
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();
}
}
}
}
![]()
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();
}
}
}
}
![]()
![]()
![]()
![]()
一、SDI应用
一、新建一个解决方案,将menustrip和toolstrip拖入主窗体:
![]()
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();
}
}
}
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);
}
}
}
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
/// <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