⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogform.cs

📁 wince open file dialog source code
💻 CS
📖 第 1 页 / 共 3 页
字号:
#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 + -