📄 dialogform.cs
字号:
#region Using 指令
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Runtime.InteropServices;
#endregion
namespace ffDialog
{
/// <summary>
/// DialogForm 的摘要说明。
/// </summary>
class DialogForm : System.Windows.Forms.Form
{
private Label FileNameLabel;
private ListView FileListView;
private ColumnHeader columnHeader1;
private ColumnHeader columnHeader2;
private TextBox FileNameEnter;
private MenuItem OKMenu;
private MenuItem OtherMenu;
private MenuItem PreDirMenu;
private MenuItem menuItem2;
private MenuItem EditMenu;
private MenuItem NewDirMenu;
private MenuItem RenMenu;
private MenuItem DelMenu;
private MenuItem menuItem6;
private MenuItem ViewMenu;
private MenuItem ListMenu;
private MenuItem DetilMenu;
private MenuItem TypeMenu;
private MenuItem menuItem11;
private MenuItem AboutMenu;
private MenuItem menuItem14;
private MenuItem CancelMenu;
private ImageList FileImageList;
private Label PleaseWaitInfo;
private MenuItem ReflashMenu;
//本窗口句柄
private IntPtr WindowHandle = IntPtr.Zero;
//正在查看的文件夹
enum ItemType { File, Directory };//目标Item类型:文件 or 文件夹
//可设置信息
public DialogModType DialogMod; //打开文件 OR 保存文件
public string DefaultDir; //默认文件夹
public ViewType DefaultViewType; //查看方式
public string Filetype; //显示文件类型
public string FileName;//返回的文件地址
//内部使用信息
string NowDir;
string AcceptFiletype;
//标记Item信息
struct ItemFileInfo
{
public string FullPach;
public ItemType FileType;
}
//记录每个Item对应的信息
ArrayList FileInfoList = new ArrayList();
//检查非法字符
bool CheckNameIsOK(string TheName)
{
if (TheName != null)
{
if (TheName.IndexOf(@"\") >= 0 || TheName.IndexOf(@"/") >= 0 || TheName.IndexOf(@":") >= 0 || TheName.IndexOf(@"*") >= 0 || TheName.IndexOf(@"?") >= 0 || TheName.IndexOf("\"") >= 0 || TheName.IndexOf(@"<") >= 0 || TheName.IndexOf(@">") >= 0 || TheName.IndexOf(@"|") >= 0)
return false;
else return true;
}
else
return false;
}
//当前被选中的Item
ListViewItem SelectItem
{
get
{
if (FileListView.SelectedIndices.Count > 0)
{
return FileListView.Items[FileListView.SelectedIndices[0]];
}
else return null;
}
}
/*
int FindIcon(string Path, ItemType TheItemType)
{
return 0;
if (Path + "" == "") return 0;
string LowerPath = Path.ToLower();
//如果是目录
if (TheItemType == ItemType.Directory) return 1;
else
{
//可执行程序
if (LowerPath.EndsWith("exe")) return 2;
//图像
else if (LowerPath.EndsWith("bmp") ||
LowerPath.EndsWith("jpg") ||
LowerPath.EndsWith("gif") ||
LowerPath.EndsWith("png") ||
LowerPath.EndsWith("jpeg") ||
LowerPath.EndsWith("tif")) return 3;
//文本
else if (LowerPath.EndsWith("txt") ||
LowerPath.EndsWith("ini") ||
LowerPath.EndsWith("gif")) return 4;
//网页
else if (LowerPath.EndsWith("htm") ||
LowerPath.EndsWith("html")) return 5;
//多媒体
else if (LowerPath.EndsWith("wav") ||
LowerPath.EndsWith("mp1") ||
LowerPath.EndsWith("mp2") ||
LowerPath.EndsWith("mp3") ||
LowerPath.EndsWith("mp4") ||
LowerPath.EndsWith("avi") ||
LowerPath.EndsWith("wma") ||
LowerPath.EndsWith("wmv") ||
LowerPath.EndsWith("mpg") ||
LowerPath.EndsWith("mpeg") ||
LowerPath.EndsWith("mid") ||
LowerPath.EndsWith("midi") ||
LowerPath.EndsWith("rm") ||
LowerPath.EndsWith("rmvb") ||
LowerPath.EndsWith("swf") ||
LowerPath.EndsWith("mp4") ||
LowerPath.EndsWith("asf") ||
LowerPath.EndsWith("wmd") ||
LowerPath.EndsWith("mov")) return 6;
//其他
else
return 0;
}
}
*/
//刷新文件夹内容
void ReflashList(string DirPath)
{
if (!Directory.Exists(DirPath)) return;
FileNameEnter.Text = "";
NowDir = DirPath;
string[] DirList = Directory.GetDirectories(NowDir); //子文件夹列表
string[] FileList = Directory.GetFiles(NowDir); //子文件列表
Array.Sort(DirList);
Array.Sort(FileList);
FileListView.Visible = false;
PleaseWaitInfo.Visible = true;
this.Refresh();
FileListView.Items.Clear(); //清空列表
FileInfoList.Clear();//清除所有Item信息
//文件夹---------------------------------
//如果是非根文件夹
if (NowDir != @"\")
{
ListViewItem NewItem = new ListViewItem("..");
NewItem.ImageIndex = 0;
FileListView.Items.Add(NewItem);
ItemFileInfo newInfo = new ItemFileInfo();
newInfo.FileType = ItemType.Directory;
newInfo.FullPach = GetPreDirectory(NowDir);
FileInfoList.Add(newInfo);
}
foreach (string EachDir in DirList)
{
ListViewItem NewItem = new ListViewItem(EachDir.Substring(EachDir.LastIndexOf(@"\") + 1));
NewItem.ImageIndex = 0;
FileListView.Items.Add(NewItem);
ItemFileInfo newInfo = new ItemFileInfo();
newInfo.FileType = ItemType.Directory;
newInfo.FullPach = EachDir;
FileInfoList.Add(newInfo);
}
//文件夹 end---------------------------------
//文件---------------------------------
foreach (string EachFile in FileList)
{
if (AcceptFiletype != "")
{
if (!EachFile.ToLower().EndsWith("." + AcceptFiletype.ToLower()))
continue;
}
ListViewItem NewItem = new ListViewItem(Path.GetFileName(EachFile));
FileInfo TheFileInfo = new FileInfo(EachFile);
long FileSize = TheFileInfo.Length;
string FileSizeStr = "";
if (FileSize > (long)(1024 * 1024))
{
FileSizeStr = (FileSize / (long)(1024 * 1024)).ToString("0");
FileSizeStr = FileSizeStr + " MB";
}
else if (FileSize > 1024L)
{
FileSizeStr = (FileSize / 1024L).ToString("0");
FileSizeStr = FileSizeStr + " KB";
}
else
{
FileSizeStr = FileSize.ToString();
FileSizeStr = FileSizeStr + " B";
}
NewItem.SubItems.Add(FileSizeStr);
NewItem.ImageIndex = 1;
FileListView.Items.Add(NewItem);
ItemFileInfo newInfo = new ItemFileInfo();
newInfo.FileType = ItemType.File;
newInfo.FullPach = EachFile;
FileInfoList.Add(newInfo);
}
//文件 end---------------------------------
if (FileListView.Items.Count > 0)
{
FileListView.Focus();
FileListView.Items[0].Selected = true;
FileListView.Items[0].Focused = true;
}
PleaseWaitInfo.Visible = false;
FileListView.Visible = true;
}
//检查文件是否合法
bool CheckDirectoryNoError(string directoryname)
{
if (Directory.Exists(directoryname))
{
return true;
}
else
{
ShowError("文件夹 " + directoryname + " 不存在.");
return false;
}
}
//检查文件是否合法
bool CheckFile(string filename)
{
if (File.Exists(filename))
{
if (DialogMod == DialogModType.OpenFile)//如果打开文件
{
return true;
}
else if (DialogMod == DialogModType.SaveFile)//保存文件
{
if (MessageBox.Show(filename + " 已经存在,替换该文件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
return true;
}
else return false;
}
return false;
}
else
{
if (DialogMod == DialogModType.OpenFile)//如果打开文件
{
ShowError("文件 " + filename + " 不存在.");
return false;
}
else if (DialogMod == DialogModType.SaveFile)//保存文件
return true;
return false;
}
}
//获得上一级文件夹
string GetPreDirectory(string TheDirectory)
{
string TempStr = TheDirectory.Substring(0, NowDir.LastIndexOf(@"\"));
if (TempStr == "") TempStr = @"\";
return TempStr;
}
//选择下一个Item
void SelectNextItem(int LastSelect)
{
if (FileListView.Items.Count > 0)
{
if (LastSelect < FileListView.Items.Count)
{
FileListView.Items[LastSelect].Selected = true;
FileListView.Items[LastSelect].Focused = true;
}
else
{
FileListView.Items[LastSelect - 1].Selected = true;
FileListView.Items[LastSelect - 1].Focused = true;
}
FileListView.EnsureVisible(SelectItem.Index);
}
}
//提示错误信息
void ShowError(string ErrorMsg)
{
MessageBox.Show(ErrorMsg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
//连接文件夹和文件
string MixToFullPath(string BaseDirName, string FileOrDirName)
{
if (BaseDirName.EndsWith(@"\") && FileOrDirName.StartsWith(@"\")) return BaseDirName + FileOrDirName.Substring(1);
else if ((!BaseDirName.EndsWith(@"\") && FileOrDirName.StartsWith(@"\")) || ((BaseDirName.EndsWith(@"\") && !FileOrDirName.StartsWith(@"\")))) return BaseDirName + FileOrDirName;
else return BaseDirName + @"\" + FileOrDirName;
}
//=================================================================================================================
/// <summary>
/// 窗体的主菜单。
/// </summary>
private System.Windows.Forms.MainMenu mainMenu1;
public DialogForm()
{
InitializeComponent();
DefaultDir = @"\"; //默认文件夹
DefaultViewType = ViewType.Detial; //查看方式
Filetype = "*|"; //显示文件类型
FileName = "";//返回的文件地址
//调整窗口控件位置
DialogForm_Resize(null, null);
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogForm));
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.OKMenu = new System.Windows.Forms.MenuItem();
this.OtherMenu = new System.Windows.Forms.MenuItem();
this.PreDirMenu = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.EditMenu = new System.Windows.Forms.MenuItem();
this.NewDirMenu = new System.Windows.Forms.MenuItem();
this.RenMenu = new System.Windows.Forms.MenuItem();
this.DelMenu = new System.Windows.Forms.MenuItem();
this.menuItem6 = new System.Windows.Forms.MenuItem();
this.ReflashMenu = new System.Windows.Forms.MenuItem();
this.ViewMenu = new System.Windows.Forms.MenuItem();
this.ListMenu = new System.Windows.Forms.MenuItem();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -