博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# OpenFileDialog And SaveFileDialog
阅读量:7209 次
发布时间:2019-06-29

本文共 4401 字,大约阅读时间需要 14 分钟。

    除了PrintPreviewDialog外,其他对话框类都派生于抽象基类CommonDialog,这个基类的方法可以管理Windows通用对话框。

 

对话框适用的场合:

1.要让用户选择和浏览要打开的文件,应使用OpenFileDialog。这个对话框可以配置为只允许选择一个文件,或可以选择多个文件。

2.使用SaveFileDialog,用户可以为要保存的文件指定一个文件名和浏览的路径。

3.PrintDialog用户选择一个打印机,并设置打印选项。

4.配置页面的边距,通常使用PageSetupDialog。

5.PrintViewDialog是在屏幕上进行打印预览的一种方法,并有一些选项如缩放。

6.FontDialog列出了所有已安装的Windows字体、样式和字号,以及各字体的预览效果,以便选择字体。

7.ColorDialog用于选择颜色。

 

文件对话框:

l         OpenFileDialog:打开文件对话框

l         SaveFileDialog:保存文件对话框

打开文件对话框

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.ShowDialog();

    会弹出一个打开文件的对话框。

通过修改对象的Title属性,可以更改对话框的标题

现在显示的是“打开”,做如下设置

            ofd.Title = "设置后标题文字:)";

再次运行程序,我们就会看到相应的修改

我们还可以通过设置InitialDirectory属性来使打开文件对话框打开时在一个设置好的默认路径上。它的默认值是一个空字符串,表示用户的“我的文档”目录,第一次在应用程序中使用这个对话框时,就显示“我的文档”目录下的文件,第二次再打开对话框时,显示的目录就与上一次打开的文件所在的目录相同。

在实际使用的时候,不要写死一个路径,如果用户不存在这个路径会出现错误。为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录。

            ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Templates);

设置文件过滤器用于打开文件对话框中显示特定类型的文件。

            ofd.Filter = "Text Document(*.txt)|*.txt|All Files|*.*|我要显示的文件类型(*.exe)|*.exe";

 

 

设置错误的Filter值会产生一个运行异常System.ArgumentException和错误信息“The provided filter string is invalid”。过滤器前后也不允许有空格。

FilterIndex属性指定列表框中的默认选项。

设置文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名。

CheckPathExists:验证路径有效性

CheckFileExists:验证文件有效性

            ofd.ValidateNames = true;

            ofd.CheckPathExists = true;

            ofd.CheckFileExists = true;

自定义帮助信息:

设置对象的ShowHelp属性可以出现一个帮助按钮,自定义帮助信息。

通过HelpRequest事件添加一个处理程序。

            ofd.ShowHelp = true;

            ofd.HelpRequest += new EventHandler(ofd_HelpRequest);

        private void ofd_HelpRequest(object sender, EventArgs e)

        {

            MessageBox.Show("我自己定义的帮助信息:)");

        }

    
    单击帮助按钮就会显示我定义的帮助信息。

 

设置Multiselect属性可以使打开文件对话框打开多个文件。

通过如下判断可以得到打开文件对话框单击的是哪个按钮。

            if(ofd.ShowDialog() == DialogResult.OK)

            {

            }

 

保存文件对话框:

使用Title属性设置对话框的标题。

文件扩展名:

AddExtension是一个布尔属性,它定义了文件扩展名是否应自动添加到用户输入的文件名上。如果用户已经输入了一个文件扩展名,就不会添加其它扩展名了。所以如果用户输入了文件名test,就保存文件test.txt,如果输入了test.txt,保存的文件仍是test.txt,而不是test.txt.txt。

如果用户没有输入文件扩展名,就使用DefaultExt属性设置的文件扩展名。如果这个属性为空,就使用当前选择的Filter中定义的文件扩展名。如果设置了Filter和DefaultExt,则不论Filter是什么,都使用Default。

同OpenFileDialog一样,具有ValidateNames、CheckFileExists和CheckPathExists三个属性,区别是对于SaveFileDialog,CheckFileExists的默认值是false,表示可以提供新文件名,进行保存。

如果设置CreatePrompt属性为true,就会询问用户是否要创建一个新文件。

如果设置OverwritePrompt属性为true,就会询问用户是否要覆盖一个已有的文件。

进行如下定义一个保存文件对话框后,我们通过如下功能可以实现一个另存为的功能:

SaveFileDialog sfd = new SaveFileDialog();

    private void miFileSaveAs_Click(object sender, EventArgs e)

    {

        if(sfd.ShowDialog() == DialogResult.OK)

        {

            string fileName = sfd.FileName;

            SaveFile(fileName);

        }

    }

 

    protected void SaveFile(string fileName)

    {

        try

        {

            Stream stream = File.OpenWrite(fileName);

            using(StreamWriter writer = new StreamWriter(stream))

            {

                writer.Write(textBox1.Text);

            }

        }

        catch(IOException ex)

        {

            MessageBox.Show(ex.Message,"Simple Editor",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);

        }

    }

 private void Save_Click(object sender, EventArgs e)

        {

            if (FileName == "")
            {
                string name;
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "*.txt|*.txt|所有文件(*.*)|*.*";
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    name = saveFileDialog.FileName;
                }
                else
                    return;
                FileInfo fileInfo = new FileInfo(name);
                fileInfo.Delete();
                StreamWriter streamWriter = fileInfo.CreateText();
                streamWriter.Write(TextBox.Text);
                streamWriter.Close();
            }
            else 
            {
                StreamWriter streamWriter = new StreamWriter(FileName, false, System.Text.Encoding.GetEncoding("gb2312"));
                streamWriter.Write(TextBox.Text);
                streamWriter.Close();
            }
            IsChanged = 0;
            TextBox.ClearUndo();
        }

 

///

 private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (isopenFile)
            {
                if (istextChanged)
                {
                    saveFileDialog1.Reset();
                    saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
                    saveFileDialog1.Title = "另存为";
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        fileAddress = saveFileDialog1.FileName;
                    }
                }
            }
            else
            {
                if (istextChanged)
                {
                    saveFileDialog1.Reset();
                    saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
                    saveFileDialog1.Title = "另存为";
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        fileAddress = saveFileDialog1.FileName;
                    }
                }
            }

        }

richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);  

url:

转载于:https://www.cnblogs.com/greatverve/archive/2011/11/01/open-save-filedialog.html

你可能感兴趣的文章
从一道题浅说 JavaScript 的事件循环
查看>>
每天进步一点点——Linux文件锁编程flock
查看>>
sqlserver锁机制详解(sqlserver查看锁)
查看>>
[公告]欢迎您加入WF技术研究团队
查看>>
5.10. Web Tools
查看>>
将Eclipse代码导入到Android Studio的两种方式
查看>>
ASP.Net4.0中新增23项功能
查看>>
HTML JS 数据校验
查看>>
Mysql中分页查询两个方法比较
查看>>
保存一下dedecms数据库表和字段说明,方便日后查询
查看>>
公众号群发文章支持添加小程序
查看>>
5.6. Spring boot with Logging
查看>>
MySQL 视图技术
查看>>
第 138 章 Spark
查看>>
flask 使用 SQLAlchemy 的两种方式
查看>>
Nginx入门笔记之————配置文件结构
查看>>
SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
查看>>
Android(Linux)实时监控串口数据
查看>>
Open Sans字体兼容问题解决办法[font-face]
查看>>
现在的我为什么不泡技术论坛了
查看>>