在教程中我会把需要特别注意的东东写出来所以估计要写的内容还是比较多但由于最近几天比较忙哈我可能会分几天时间把教程补充完整谢谢!
本例完成的东东是一个文件管理器Windows资源管理器山寨版算是一个很简单的教程吧不涉及数据库只是做一个winform程序如果要做成web形式的基本相同只需要作小部分地修改当然这个文件管理器还存在很多不足有待于功能和界面上的完善本例主要是提供给那些和我一样是菜菜的爱好者进行学习高手呢可以飘过当然能留下您宝贵的指导是最好的嘿嘿
下面详细介绍这个小程序能实现的功能
包括TXET文本的新建复制粘贴删除和撤销等文件操作
对文本字体的操作:粗体下划线和斜体
包括文本夹的新建复制粘贴删除等文件夹操作
五种查看方式:列表小图标大图标标题和详细
软件界面
文件管理器主界面
进入驱动器D盘后的界面
新建文件界面
新建文件夹界面
文本文档界面
SystemIO
SystemIO命名空间很重要它包含了许多的类以便让托管应用程序可以通过同步或异步方式提供文本I/O以及其他形式的输入和输出方式从而操作文件系统或流的输入和输出操作SystemIO的命名空间相当庞大在本例中主要用到以下几个方面
File类:它提供了打开创建复制移动重命名文件以及读写文件属性的静态方法
Directory类:它为目录提供编程接口使应用程序可以通过简单的方法来创建删除目录
FileStream类:它允许将文件作为流访问实现标准的输出输入操作可随机的访问文件内容
StreamReader与StreamWriter类:它们支持对文本的读写操作让应用程序可以访问文件或信息流
下面简要说一下在例子中用到的几个控件及它们的属性
ListView
通过ListView控件可以在标准视图对话框中进行各种操作(查看打开文件等)本例中主要用到以下功能
View: a LargeIcon:所有选项都在其旁边显示一个大图标和一个标签
b SmallIcon:所有选项都在其旁边显示一个小图标和一个标签
c List:只显示一列该列可以包含一个图标和一个标签
d Details:可以显示任意数量的列只有第一列可以包含图像
SelectedItems:这个属性包含了选中选项的集合
MultiSelect:这个属性设置为true用户可以选择多个选项
LargeImageList:这个属性包含ImageList其中ImageList包含ListView中要使用的图像当View属性为LargeIcon时可以使用图像
SmallImageList:这个属性包含ImageList其中ImageList包含ListView中要使用的图像当View属性为SmallIcon时可以使用图像
ImageList
ImageList 控件包含 ListImage 对象的集合该集合中的每个对象都可以通过其索引或关键字被引用ImageList 控件不能独立使用只是作为一个便于向其它控件提供图象的资料中心
语法ImageList
ImageList 控件的作用象图像的储藏室同时它需要第二个控件显示所储存的图像第二个控件可以是任何能显示图像 Picture 对象的控件也可以是特别设计的用于绑定 ImageList 控件的 Windows 通用控件之一这些控件包括ListViewToolBarTabStripHeaderImageCombo和 TreeView 控件为了与这些控件一同使用 ImageList必须通过一个适当的属性将特定的 ImageList控件绑定到第二个控件对于 ListView 控件必须设置其 Icons 和 SmallIcons 属性为 ImageList 控件对于 TreeViewTabStripImageCombo和 Toolbar 控件必须设置 ImageList 属性为 ImageList 控件
在设计时可以用ImageList 控件属性对话框的图像选项卡来添加图象在运行时可以用 Add 方法给 ListImages 集合添加图象
ContextMenuStrip
ContextMenuStrip 控件提供了与某个控件关联的快捷菜单也就是说通过这个控件可以方便的实现在别的控件上弹出右键快捷菜单
例子
先添加一个ContextMenuStrip 控件到Form上
设置目标控件(如窗体文本框等)的ContextMenuStrip属性指向你刚才添加的ContextMenuStrip 控件这样就实现了两者的关联
动态将一些菜单项添加到 ContextMenuStrip 控件中如
//上下文菜单项
ContextMenuStripItemsAdd(msEditNew);
ContextMenuStripItemsAdd(msEditBar);
ContextMenuStripItemsAdd(msEditCut);
ContextMenuStripItemsAdd(msEditPaste);
ContextMenuStripItemsAdd(msEditDelete);
ContextMenuStripItemsAdd(msEditBar);
这样就OK了你在目标控件上按右键时将弹出快捷菜单
通过上面的介绍大家应该能明白本例中要实现的效果需要用到的控件及重要属性等下面就可以切入正题如何通过编程实现我们上面提到的功能呵呵再提一点也是比较重要的C#是一种面向对象的编程语言因此在编程之前我们就要有面向对象编程的思想在编程的过程中贯彻这样的思想
同时这也是符合目前公司里的编程思想还有一点尽量做到代码的规范可以为以后再次开发或别人阅读我们程序起到简便明了的作用
主要有两个类Foldercs和Txtcs分别是对文件和文本的相关操作类里的方法我都做了详尽的注释如果还有什么不明白可以联系我
Foldercs
CODE:
using System;
using SystemCollectionsGeneric;
using SystemText;
using SystemWindowsForms;
using SystemIO;
namespace FileManagerClass
{
public class Folder
{
/// <summary>
/// 新建文件夹
/// </summary>
/// <param name=filename>文件夹名</param>
/// <param name=path>文件夹路径</param>
public static void NewFolder(string foldername string path)
{
foldernameTrim();
//如果输入信息为空提示
if (foldername == )
{
MessageBoxShow(目录名不能为空);
return;
}
else
{
string FullName = path + \\ + foldername;
//如果该文件以及存在
if (DirectoryExists(FullName))
{
MessageBoxShow(该目录已经存在请重命名);
return;
}
else
{
//新建文件夹
DirectoryCreateDirectory(FullName);
}
}
}
/// <summary>
/// 新建文件夹(Enter键触发)
/// </summary>
/// <param name=filename>文件夹名</param>
/// <param name=path>文件夹路径</param>
public static void Enter(string foldername string path)
{
foldernameTrim();
if (foldername == )
{
MessageBoxShow(目录名不能为空!);
return;
}
else if (DirectoryExists(path + \\ + foldername))
{
MessageBoxShow(该目录以及存在请重新命名);
return;
}
else
{
DirectoryCreateDirectory(path + \\ + foldername);
}
}
/// <summary>
/// //获取文件夹名
截取\
/// </summary>
/// <param name=DirectoryPath>文件夹完整路径</param>
/// <returns></returns>
internal static int DirectoryName(string DirectoryPath)
{
int j = ;
char[] c = DirectoryPathToCharArray();
for (int i = cLength ; i >= ; i)//从后面截取
{
j = i;
if (c[i]ToString() == \\)
{
break;//遇\调处并返回\的位置
}
}
return j + ;
}
/// <summary>
/// 在指定目录下新建一个文件夹
/// </summary>
/// <param name=path></param>
/// <param name=name></param>
public static void CreateDir(string path string name)
{
DirectoryCreateDirectory(path + \\ + name);
}
/// <summary>
/// 复制文件
/// </summary>
/// <param name=oldDir>原文件所在文件夹路径</param>
/// <param name=Name>文件名</param>
/// <param name=newDir>新文件夹路径</param>
public static void CopyFile(string oldDir string Name string newDir)
{
FileCopy(oldDir + \\ + Name newDir + \\ + Name);
}
/// <summary>
/// 复制文件
/// </summary>
/// <param name=oldDir>原文件所在文件夹路径</param>
/// <param name=newDir>新文件夹路径</param>
public static void CopyFile(string oldDir string newDir)
{
string name = oldDirSubstring(DirectoryName(oldDir));
FileCopy(oldDir newDir + \\ + name);
}
/// <summary>
/// 删除指定文件夹
/// </summary>
/// <param name=strDir>文件夹完整路径</param>
/// <param name=recursive>是否删除文件夹子项</param>
public static void DeleteFolder(string strDir bool recursive)
{
DirectoryDelete(strDir recursive);
}
/// <summary>
/// 返回指定路径的DirectoryInfo
/// </summary>
/// <returns></returns>
public static DirectoryInfo GetDir(string path)
{
return new DirectoryInfo(path);
}
}
}
Txtcs
CODE:
using System;
using SystemCollectionsGeneric;
using SystemText;
using SystemWindowsForms;
using SystemIO;
using SystemDrawing;
namespace FileManagerClass
{
public class Txt
{
public Txt()
{
}
/// <summary>
/// 新建文件
/// </summary>
/// <param name=filename>文件名</param>
/// <param name=path>文件路径</param>
public static void NewFile(string filenamestring path)
{
filenameTrim();
if (filename == )
{
MessageBoxShow(文件名不能为空~!);
}
else
{
if (FileExists(path + \\ + filename+txt))
{
MessageBoxShow(该文件名已经存在请重命名);
}
else
{
string FullName = path + \\ + filename + txt; //获得文件完整信息
StreamWriter Sw = FileCreateText(FullName);
}
}
}
/// <summary>
/// 新建文件(Enter键触发)
/// </summary>
/// <param name=filename>文件名</param>
/// <param name=path>文件路径</param>
public static void Enter(string filename string path)
{
filenameTrim();
if (filename == )
{
MessageBoxShow(文件名不能为空~!);
}
else
{
if (FileExists(path + \\ + filename+txt))
{
MessageBoxShow(该文件名已经存在请重命名);
}
else
{
string FullName = path + \\ + filename + txt; //获得文件完整信息
StreamWriter Sw = FileCreateText(FullName);
}
}
}
/// <summary>
/// 读取显示
/// </summary>
/// <param name=filename>文本文件名</param>
/// <param name=contents>内容</param>
public static string Display(string filename)
{//读取显示
try
{
string contents;
FileStream fs = new FileStream(filename FileModeOpen FileAccessRead); //读出所打开的文本文件
StreamReader reader = new StreamReader(fs); //实例化一个streamreader
contents = readerReadToEnd(); //将数据显示
fsClose();
return contents;
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
return ;
}
}
/// <summary>
/// 打开
/// </summary>
/// <param name=ofd>打开对话框</param>
/// <param name=fullname>文本文件名</param>
/// <param name=contents>内容</param>
public static void Open(OpenFileDialog ofdstring fullnamestring contents)
{//打开文本
try
{
if (ofdShowDialog() == DialogResultOK)
{
string fileName = ofdFileName; //文件名
FileStream fs = new FileStream(fileName FileModeOpen FileAccessRead);
StreamReader reader = new StreamReader(fs);
fullname = fileName;
contents = readerReadToEnd();
fsClose();
}
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
/// <summary>
/// 保存
/// </summary>
/// <param name=fullname>文本文件名</param>
/// <param name=contents>内容</param>
public static void Save(string fullnamestring contents)
{//保存
try
{
StreamWriter writer = new StreamWriter(fullname);
writerWrite(contents); //用write()方法把txtContent的数据写入文件
writerClose();
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
/// <summary>
/// 另存为
/// </summary>
/// <param name=sfd>保存对话框</param>
/// <param name=contents>内容</param>
public static void SaveAs(SaveFileDialog sfdstring contents)
{
if (sfdShowDialog() == DialogResultOK)
{
string fileName = sfdFileName;
try
{
Stream stream = FileOpenWrite(fileName);
using (StreamWriter writer = new StreamWriter(stream))
{
writerWrite(contents);
writerClose();
}
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
}
/// <summary>
/// 粗体
/// </summary>
/// <param name=rtb></param>
public static void Bold(RichTextBox rtb)
{
Font newFont = new Font(rtbSelectionFont
(rtbSelectionFontBold ?
rtbSelectionFontStyle & ~FontStyleBold :
rtbSelectionFontStyle | FontStyleBold));
rtbSelectionFont = newFont;
}
/// <summary>
/// 斜体
/// </summary>
/// <param name=rtb></param>
public static void Italic(RichTextBox rtb)
{
Font newFont = new Font(rtbSelectionFont
(rtbSelectionFontItalic ?
rtbSelectionFontStyle & ~FontStyleItalic :
rtbSelectionFontStyle | FontStyleItalic));
rtbSelectionFont = newFont;
}
/// <summary>
/// 下划线
/// </summary>
/// <param name=rtb></param>
public static void Underline(RichTextBox rtb)
{
Font newFont = new Font(rtbSelectionFont
(rtbSelectionFontUnderline ?
rtbSelectionFontStyle & ~FontStyleUnderline :
rtbSelectionFontStyle | FontStyleUnderline));
rtbSelectionFont = newFont;
}
/// <summary>
/// 复制
/// </summary>
/// <param name=rtb></param>
public static void Copy(RichTextBox rtb)
{
if (rtbSelectedTextEquals())
return;
ClipboardSetDataObject(rtbSelectedText true);
}
/// <summary>
/// 剪切
/// </summary>
/// <param name=rtb></param>
public static void Cut(RichTextBox rtb)
{
if (rtbSelectedTextLength > )
{
try
{
rtbCut();
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
}
/// <summary>
/// 粘贴
/// </summary>
/// <param name=rtb></param>
public static void Paste(RichTextBox rtb)
{
rtbPaste();
}
/// <summary>
/// 退出
/// </summary>
/// <param name=fullname>文本文件全名</param>
/// <param name=contents>内容</param>
public static void Exit(string fullnamestring contents)
{
if (MessageBoxShow( 是否保存文件
提示 MessageBoxButtonsOKCancel) == DialogResultOK)
{
try
{
StreamWriter writer = new StreamWriter(fullname);
writerWrite(contents); //用write()方法把txtContent的数据写入文件
writerClose();
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
}
/// <summary>
/// 在指定目录新建一个文本文件
/// </summary>
/// <param name=path></param>
/// <param name=name></param>
/// <returns></returns>
public static StreamWriter CreateText(string path string name)
{
return FileCreateText(path + \\ + name);
}
/// <summary>
/// 删除指定文件
/// </summary>
/// <param name=strFile>文件完整路径</param>
public static void DeleteFile(string strFile)
{
FileDelete(strFile);
}
}
}