OpenDialog/SaveDialog 中 Filter用法

本文介绍了在编程中如何使用Filter属性进行文件类型过滤,包括语法、实例代码及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Filter 属性 赋值为一字符串 用于过滤文件类型;

字符串说明如下:

‘|’分割的两个,一个是注释,一个是真的Filter,显示出来的是那个注释。如果要一次显示多中类型的文件,用分号分开。
如:

Open1.Filter="图片文件(*.jpg,*.gif,*.bmp)|*.jpg;*.gif;*.bmp";

则过滤的文件类型为 “|”号  右边的 *.jpg;*.gif;*.bmp 三种类型文件,在OpenDialog/SaveDialog中显示给用户看的文件类型字符串则是 :“|”号  左边的 图片文件(*.jpg,*.gif,*.bmp)。

再如:

Open1.Filter="图像文件(*.jpg;*.jpg;*.jpeg;*.gif;*.png)|*.jpg;*.jpeg;*.gif;*.png";

附上一小段代码:

/// <summary>
         /// 选择要保存Excel的文件路径
         /// </summary>
         /// <param name="saveFileName">文件完整路径</param>
         /// <returns>布尔值,判断文件保存路径是否可用</returns>
          public bool GetExcelDestination(ref string saveFileName)
         {
             SaveFileDialog saveDialog = new SaveFileDialog();
             saveDialog.DefaultExt = "xlsx";
             saveDialog.Filter = "Excel 2007文件|*.xlsx|Excel 99-03文件|*.xls";
             saveDialog.ShowDialog();
 
             //被点了取消
              if (saveDialog.FileName.IndexOf(":") < 0)
             {
                 return false;
             }
 
             //模板Excel不存在
             if ((!File.Exists(Application.StartupPath.Trim() + @"\templates\template.xlsx")) || (!File.Exists(Application.StartupPath.Trim() + @"\templates\template.xls")))
             {
                 MessageBox.Show("模板Excel不存在!请确保文件安装目录" + Application.StartupPath.Trim() + "下的templates文件夹里的template.xlsx文件存在!");
                 return false;
             }
 
             //如果选择保存的文件路径是模板文件,则禁止保存
             if (saveDialog.FileName == Application.StartupPath.Trim() + @"\templates\template.xlsx" || saveDialog.FileName == Application.StartupPath.Trim() + @"\templates\template.xls")
             {
                 MessageBox.Show("请不要选择模板Excel作为导出文件!");
                 return false;
             }
 
             //如果对方机子未安装Excel
             Excel._Application myExcel = new Excel.Application();
             if (myExcel == null)
             {
                 MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel!");
                 return false;
             }
 
             //错误检测全通过后
             saveFileName = saveDialog.FileName;
             return true;
         }


 

 

using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; // 必须添加这个命名空间引用 using System.Configuration; using System.Xml; namespace _7 { public partial class Form1 : Form { private List<string> recentFiles = new List<string>(); private const int MaxRecentFiles = 5; private string currentFilePath = null; // 添加当前文件路径字段 public Form1() { InitializeComponent(); this.Controls.Add(txtContent); LoadRecentFiles(); // 加载历史记录 } // 保存历史记录到XML文件 private void SaveRecentFiles() { string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appFolder = Path.Combine(appDataPath, "YourAppName"); string configPath = Path.Combine(appFolder, "config.xml"); // 确保目录存在 Directory.CreateDirectory(appFolder); using (XmlWriter writer = XmlWriter.Create(configPath)) { writer.WriteStartDocument(); writer.WriteStartElement("Configuration"); writer.WriteStartElement("RecentFiles"); foreach (string file in recentFiles) { writer.WriteElementString("File", file); } writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); } } // 从XML文件加载历史记录 private void LoadRecentFiles() { string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string configPath = Path.Combine(appDataPath, "YourAppName", "config.xml"); if (File.Exists(configPath)) { try { XmlDocument doc = new XmlDocument(); doc.Load(configPath); recentFiles.Clear(); XmlNodeList fileNodes = doc.SelectNodes("/Configuration/RecentFiles/File"); if (fileNodes != null) { foreach (XmlNode node in fileNodes) { if (!string.IsNullOrEmpty(node.InnerText)) { recentFiles.Add(node.InnerText); } } } } catch (Exception ex) { MessageBox.Show($"加载历史记录失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } UpdateRecentFilesMenu(); } // 更新最近文件菜单 private void UpdateRecentFilesMenu() { // 确保菜单项存在 if (menuRecentFiles == null) { menuRecentFiles = new ToolStripMenuItem("最近文件"); menuFile.DropDownItems.Add(menuRecentFiles); } menuRecentFiles.DropDownItems.Clear(); foreach (string file in recentFiles) { ToolStripMenuItem item = new ToolStripMenuItem(Path.GetFileName(file)); item.Tag = file; item.Click += RecentFile_Click; menuRecentFiles.DropDownItems.Add(item); } // 添加清除历史选项 if (recentFiles.Count > 0) { menuRecentFiles.DropDownItems.Add(new ToolStripSeparator()); ToolStripMenuItem clearItem = new ToolStripMenuItem("清除历史记录"); clearItem.Click += (s, e) => { recentFiles.Clear(); SaveRecentFiles(); UpdateRecentFilesMenu(); }; menuRecentFiles.DropDownItems.Add(clearItem); } } // 从设置加载历史记录 private void LoadRecentFiles() { string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "YourAppName", "config.xml"); if (File.Exists(configPath)) { XmlDocument doc = new XmlDocument(); doc.Load(configPath); recentFiles.Clear(); foreach (XmlNode node in doc.SelectNodes("/Configuration/RecentFiles/File")) { recentFiles.Add(node.InnerText); } } } private void txtInput_TextChanged(object sender, EventArgs e) { } private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e) { } private void btnSave_Click_1(object sender, EventArgs e) { if (currentFilePath != null && File.Exists(currentFilePath)) { // 直接保存到当前文件 SaveToFile(currentFilePath); } else { // 弹出保存对话框 SaveWithDialog(); } } // 使用对话框保存 private void SaveWithDialog() { using (SaveFileDialog saveDialog = new SaveFileDialog()) { saveDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; saveDialog.FilterIndex = 1; if (saveDialog.ShowDialog() == DialogResult.OK) { currentFilePath = saveDialog.FileName; SaveToFile(currentFilePath); AddToRecentFiles(currentFilePath); } } } // 实际保存文件的方法 private void SaveToFile(string path) { try { File.WriteAllText(path, txtContent.Text); MessageBox.Show($"文件已保存至:\n{path}", "保存成功"); UpdateRecentFilesMenu(); } catch (Exception ex) { MessageBox.Show($"保存失败:\n{ex.Message}", "错误"); } } private void btnOpen_Click(object sender, EventArgs e) { using (OpenFileDialog openDialog = new OpenFileDialog()) { openDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; openDialog.FilterIndex = 1; if (openDialog.ShowDialog() == DialogResult.OK) { OpenFile(openDialog.FileName); } } } // 打开文件的方法 private void OpenFile(string path) { try { txtContent.Text = File.ReadAllText(path); currentFilePath = path; AddToRecentFiles(path); UpdateRecentFilesMenu(); MessageBox.Show($"已打开文件:\n{path}", "打开成功"); } catch (Exception ex) { MessageBox.Show($"打开失败:\n{ex.Message}", "错误"); } } // 添加到最近文件列表 private void AddToRecentFiles(string path) { // 如果已存在则移除 if (recentFiles.Contains(path)) { recentFiles.Remove(path); } // 添加到列表顶部 recentFiles.Insert(0, path); // 限制历史记录数量 if (recentFiles.Count > MaxRecentFiles) { recentFiles.RemoveAt(recentFiles.Count - 1); } // 保存到设置 SaveRecentFiles(); } // 更新最近文件菜单 private void UpdateRecentFilesMenu() { menuRecentFiles.DropDownItems.Clear(); foreach (string file in recentFiles) { ToolStripMenuItem item = new ToolStripMenuItem(Path.GetFileName(file)); item.Tag = file; item.Click += RecentFile_Click; menuRecentFiles.DropDownItems.Add(item); } // 添加清除历史选项 menuRecentFiles.DropDownItems.Add(new ToolStripSeparator()); ToolStripMenuItem clearItem = new ToolStripMenuItem("清除历史记录"); clearItem.Click += (s, e) => { recentFiles.Clear(); SaveRecentFiles(); UpdateRecentFilesMenu(); }; menuRecentFiles.DropDownItems.Add(clearItem); } private void menuRecentFiles_Click(object sender, EventArgs e) { if (sender is ToolStripMenuItem item && item.Tag != null) { string path = item.Tag.ToString(); if (File.Exists(path)) { OpenFile(path); } else { MessageBox.Show("文件不存在或已被移动", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); recentFiles.Remove(path); SaveRecentFiles(); UpdateRecentFilesMenu(); } } } // 使用对话框保存 private void SaveWithDialog() { using (SaveFileDialog saveDialog = new SaveFileDialog()) { saveDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; saveDialog.FilterIndex = 1; if (saveDialog.ShowDialog() == DialogResult.OK) { currentFilePath = saveDialog.FileName; SaveToFile(currentFilePath); AddToRecentFiles(currentFilePath); } } } // 实际保存文件的方法 private void SaveToFile(string path) { try { File.WriteAllText(path, txtContent.Text); MessageBox.Show($"文件已保存至:\n{path}", "保存成功", MessageBoxButtons.OK, MessageBoxIcon.Information); UpdateRecentFilesMenu(); } catch (Exception ex) { MessageBox.Show($"保存失败:\n{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 打开文件的方法 private void OpenFile(string path) { try { txtContent.Text = File.ReadAllText(path); currentFilePath = path; AddToRecentFiles(path); MessageBox.Show($"已打开文件:\n{path}", "打开成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show($"打开失败:\n{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 添加到最近文件列表 private void AddToRecentFiles(string path) { // 如果已存在则移除 if (recentFiles.Contains(path)) { recentFiles.Remove(path); } // 添加到列表顶部 recentFiles.Insert(0, path); // 限制历史记录数量 if (recentFiles.Count > MaxRecentFiles) { recentFiles.RemoveAt(recentFiles.Count - 1); } // 保存到设置 SaveRecentFiles(); } private void menuSave_Click(object sender, EventArgs e) { if (currentFilePath != null && File.Exists(currentFilePath)) { SaveToFile(currentFilePath); } else { SaveWithDialog(); } } private void menuOpen_Click(object sender, EventArgs e) { using (OpenFileDialog openDialog = new OpenFileDialog()) { openDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; openDialog.FilterIndex = 1; if (openDialog.ShowDialog() == DialogResult.OK) { OpenFile(openDialog.FileName); } } } } } LoadRecentFiles(); // 加载历史记录有二义性
07-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值