OpenDialog/SaveDialog 中 Filter用法

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

字符串说明如下:

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

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

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


一.常用属性

   1.DefaultExt特性:
当用户未输入文件扩展名时它用于指明默认的扩展名。
   2.FileName特性:
它为string型用于记录最后一个被选中的文件的全路径名。默认为空。
   3.Filter(过滤器)特性:
它用于设置打开对话框中显示的文件类型,实在打开的对话框中仅显示与该特性所列的相匹配的文件。在程序设计阶段用户可以在对象观察器中,单击Filter特性值框中的“...”按钮,将弹出Filter Editor 对话框,可以在此设置预显示文件的扩展名,既设置过滤器。用户还可以在程序代码中动态的设置该特性值。例如:
Filter:='delphi uint Files|*.pas;*.dpr';
   4.FilterIndex特性:
该特性为integer类型,在设置了多个过滤器时,用于确定在打开对话框中文件类型下拉列表中初始显示的过滤器的序号,其默认值为1。
   5.InitilDir特性:
用它指明对话框的默认目录。
   6.Title特性:
用它指明OpenDialog 组件标题栏中的字符串,默认值为“打开”。
   等 
二、常用方法
  Execute方法:
起作用是打开对话框,用户单击“打开”或OK按钮,该方法返回值为true;用户单击“取消”或Cancel按钮,该方法返回值为False。
  通常用程序代码打开文件的结构如下:
if OpenDialog1.Execute then
  degin
    //打开文件操作
  end;
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值