openFileDialog默认路径问题

shengjie122 2016-07-27 09:45:06
各位大神,本人最近一直在OpenFileDialog的默认路径上产生很大疑问。我设置默认路径是 桌面,但再次打开时却变成了打开文件的路径。以下在代码,请各位高手帮忙解答
private void btnExcel2_Click(object sender, EventArgs e)
{
string strPath = System.IO.Directory.GetCurrentDirectory();
OpenFileDialog fd1 = new OpenFileDialog();
fd1.Filter = "Excel_2013(*.xlsx)|*.xlsx|Excel_之前版本(*.xls)|*.xls|所有文件(*.*)|*.*";
fd1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
fd1.ShowReadOnly = true;

if (fd1.ShowDialog() == DialogResult.OK)
{
Excel.Application eApp2 = new Excel.Application();
Excel.Workbook book = eApp2.Application.Workbooks.Add(fd1.FileNames);
eApp2.Visible = true;

SecondTextPath.Text = fd1.FileName.ToString();
SecondTextPath.ReadOnly = true;
}
else
{
return;
}

if (fd1.FileName != Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
{
MessageBox.Show(fd1.FileName.ToString());
fd1.Reset();
}
}
...全文
410 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
花开花折 2016-07-29
  • 打赏
  • 举报
回复
引用 3 楼 shengjie122 的回复:
[quote=引用 1 楼 u010909114 的回复:] 去除 fd1.ShowReadOnly = true; 再试试。
确实是成功了,但去除后整体的图标变大,还有每次关闭窗口后默认路径都会回到桌面。有没有办法,关掉软件后才会默认路径,没关掉才会返回上一次选择的路径[/quote] 你得自己设定一个变量记录最后次打开文件的路径 string path="",赋值给 fd1.InitialDirectory=path;
  • 打赏
  • 举报
回复
引用 3 楼 shengjie122 的回复:
[quote=引用 1 楼 u010909114 的回复:] 去除 fd1.ShowReadOnly = true; 再试试。
确实是成功了,但去除后整体的图标变大,还有每次关闭窗口后默认路径都会回到桌面。有没有办法,关掉软件后才会默认路径,没关掉才会返回上一次选择的路径[/quote] 设置一个全局变量记录上次打开路径,其默认值是桌面。每次打开openFileDialog之前都用这个变量给openFileDialog.FileName赋值,这样关掉后再打开默认路径就是桌面。每次选择了新的路径后再记录下来,打开选择框的时候再用记录的路径赋值设置路径。
shengjie122 2016-07-29
  • 打赏
  • 举报
回复
引用 1 楼 u010909114 的回复:
去除 fd1.ShowReadOnly = true; 再试试。
确实是成功了,但去除后整体的图标变大,还有每次关闭窗口后默认路径都会回到桌面。有没有办法,关掉软件后才会默认路径,没关掉才会返回上一次选择的路径
D56233577 2016-07-28
  • 打赏
  • 举报
回复
RestoreDirectory 获取或设置一个值,该值指示该对话框在关闭前是否将目录还原为之前选定的目录。(从 FileDialog 继承。)
花开花折 2016-07-28
  • 打赏
  • 举报
回复
引用 楼主 shengjie122 的回复:
各位大神,本人最近一直在OpenFileDialog的默认路径上产生很大疑问。我设置默认路径是 桌面,但再次打开时却变成了打开文件的路径。以下在代码,请各位高手帮忙解答 private void btnExcel2_Click(object sender, EventArgs e) { string strPath = System.IO.Directory.GetCurrentDirectory(); OpenFileDialog fd1 = new OpenFileDialog(); fd1.Filter = "Excel_2013(*.xlsx)|*.xlsx|Excel_之前版本(*.xls)|*.xls|所有文件(*.*)|*.*"; fd1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); fd1.ShowReadOnly = true; if (fd1.ShowDialog() == DialogResult.OK) { Excel.Application eApp2 = new Excel.Application(); Excel.Workbook book = eApp2.Application.Workbooks.Add(fd1.FileNames); eApp2.Visible = true; SecondTextPath.Text = fd1.FileName.ToString(); SecondTextPath.ReadOnly = true; } else { return; } if (fd1.FileName != Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)) { MessageBox.Show(fd1.FileName.ToString()); fd1.Reset(); } }
去除 fd1.ShowReadOnly = true; 再试试。
 在C#中创建的文件选择对话框其实就是OpenFileDialog类的实例。通过对设定 OpenFileDialog类的属性来定制文件选择对话框的式样和功能。OpenFileDialog类的主要属性如下表: 属性 说明 AddExtension 该值指示如果用户省略扩展名对话框是否自动在文件名中添加扩展名。 CheckFileExists 该值指示如果用户指定不存在的文件名对话框是否显示警告。 CheckPathExists 该值指示如果用户指定不存在的路径对话框是否显示警告。 DefaultExt 获取或设置默认文件扩展名。 DereferenceLinks 该值指示对话框是否返回快捷方式引用的文件的位置或者是否返回快捷方式 FileName 字符串,获取或设置一个包含在文件对话框中选定的文件名的字符串。 FileNames 字符串数组,获取对话框中所有选定文件的文件名。 Filter 字符串,获取或设置当前文件名筛选器字符串该字符串决定对话框的"另存为文件类型"或"文件类型"框中出现的选择内容。 FilterIndex 整型,获取或设置文件对话框中当前选定筛选器的索引。 InitialDirectory 字符串,获取或设置文件对话框显示的初始目录。 Multiselect 布尔型,该值指示对话框是否允许选择多个文件。 ReadOnlyChecked 布尔型,该值指示是否选定只读复选框。 RestoreDirectory 布尔型该值指示对话框在关闭前是否还原当前目录。 ShowHelp 布尔型,该值指示文件对话框中是否显示"帮助"按钮。 ShowReadOnly 布尔型,该值指示对话是否包含只读复选框。 Title 字符串,获取或设置文件对话框标题。   C#通过调用OpenFileDialog类实例的ShowDialog方法显示创建的实例,这样一个文件选择对话框就显示出来了。   下列代码的作用在C#中通过创建一个OpenFileDialog实例,并设定此实例的各个属性值,来定制一个可以选择多个文件的文件选择对话框,并且把使用此对话框选择的多个文件名称通过提示框显示出来。请各位读者注意具体的实现方法: DialogResult d = openFileDialog1.ShowDialog(); if (d == DialogResult.OK) { string[] fileNames = openFileDialog1.FileNames; string fileNameString = string.Empty; foreach (string s in fileNames) { fileNameString = fileNameString + s + "\n"; } MessageBox.Show(fileNameString); }
新浪阅读器总结 一:综述 在新浪阅读器中,我首次学到了RSS(Rich Site Summary)或(Really Simple Syndication)中文名称:建议信息聚合。RSS是一种基于XML标准,在互联网上被广泛采用的内容包装和投递协议。 二:项目实现的成果和代码。 再这里面,我首先对xml文件中的内容进行总结: 1:如何加载xml文件(两种方法) A:通过打开文件对话框来打开(openfiledialog) if (openFileDialog1 .ShowDialog()==DialogResult .OK ) { String strFileName = openFileDialog1.FileName; //加载xml文件 XmlDocument doc = new XmlDocument(); doc.Load(strFileName ); } B:文件的路径是web地址 //加载xml文件 XmlDocument doc = new XmlDocument(); //文件路径可以是web地址............ doc.Load("http://rss.sina.com.cn/news/marquee/ddt.xml"); 2:如何获取xml的内容 获取单一节点的内容(SelectSingleNode) XmlNode node = doc.SelectSingleNode("rss/channel/title"); 获取多个节点的内容(SelectNodes) XmlNodeList list = doc.SelectNodes("rss/channel/item"); 3:获取属性值(Attributes ["version"].Value) //获取属性(根节点) XmlNode root = doc.SelectSingleNode("rss"); MessageBox.Show(root .Attributes ["version"].Value ); 4:获取text的内容 String title = itemlist[i].SelectSingleNode("title").InnerText; 下面对界面中学到的内容做个总结: 1:Treeview的afterselect事件 当点击treeview里面的频道信息时,加载右面的listview里面内容 如何往listview里面添加列(("日期", 100)日期表示列名,100表示列所占的长度): lv.Columns.Add("日期", 100); lv.Columns.Add("标题", 400); lv.Columns.Add("作者", 100); 将更新时间进行格式化; pubdate = Convert.ToDateTime(pubdate).ToString("yyy-mm-dd HH:mm:ss"); 向listview添加行内容的时候要注意第一个用lvi.text后面都用lvi.subitems.add 如下; lvi.Text = pubdate; lvi.SubItems.Add(title); lvi.SubItems.Add(author); lvi.Tag = link;//存储超链接 2:在treeview加载频道的信息(基本的格式) 首先获取频道的分类: XmlNodeList channelclasslist = doc.SelectNodes("opml/body/outline"); 得到频道数; ChannelClassCount = channelclasslist.Count; 通过循环来添加treeview的节点(下面的是一级节点) for (int i = 0; i < channelclasslist.Count;i++ ) { //增加treeview的一级节点 TreeNode tnchannelclass = new TreeNode(); tnchannelclass .Text =channelclasslist [i ].Attributes ["text"].Value.Replace ("-新浪RSS","") ; tnchannelclass.Tag ="0"; tvlist.Nodes.Add(tnchannelclass ); 3:如何将全屏显示(两种方法): A:使用全局变量(省略一部分代码) private bool isfullscreen = false; private void toolStripButton15_Click(object sender, EventArgs e) { if (isfullscreen ==false ) { isfullscreen = true; panel1.Visible = false; } else //与上面情况相反 { isfullscreen = false ; panel1.Visible = true ; } B:当前界面的显示情况与当前完全相反 是在全屏按钮事件下: panel1.Visible = !panel1.Visible; 4:listview下面的内容: A:属性:Mulit select(允许选择多项) FullRowSelect(选中整行) 该listview没有默认的图片,在imagelist里面可以选择图片 B:事件(lv_SelectedIndexChanged)选择之后改变的事件 这里面当选中listview中的内容,在下面的web中加载信息 5:缓存 在新浪阅读其中还加了一个缓存: 缓存就是当选中treeview节点时,访问缓存(url)判断是否有xml数据,这面分两种情况,当无缓存时,我们在这面要第一次读取,读取完将xml数据写入缓存并记录当前的读取时间,显示xml数据。当有缓存时,判断时间是否超时,如果已经超时,从网络中重新读取,读取完将xml数据写入缓存并记录当前的读取时间,显示xml数据。未超时的话,获取缓存中的数据显示。
二维码编码解码器源码 本源码实现可以在C#中使用的1D/2D编码解码器。条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票有二维码识别、网易的首页有二维码图标,用户只需要用手机扫描一下就可以看到手机版网易的网址,免去了输入长串字符的麻烦。 条形码的标准: 条形码的标准有ENA条形码、UPC条形码、二五条形码、交叉二五条形码、库德巴条形码、三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码。EAN商品条形码亦称通用商品条形码,由国际物品编码协会制定,通用于世界各地,是目前国际上使用最广泛的一种商品条形码。我国目前在国内推行使用的也是这种商品条形码。EAN商品条形码分为EAN-13(标准版)和EAN-8(缩短版)两种。 二维码的编码标准: 全球现有的二维码多达200种以上,其中常见的技术标准有PDF417(美系标准),QRCode(日系标准),Code49,Code16K,CodeOne,DM(韩系标准),GM(中国标准),CM(中国标准)等20余种。用得最多的是QRcode。 下面借助google的开源项目zxing来实现1D/2D的编码和解码 zxing的功能还是很强大的,最初是用java编写,并支持Android、ios、symbian等手机操作系统。 不过不知是何原因,该官网连一个例子也没有,文档也是字典式的把所有类列出来,一点都没为读者考虑。 下面我把如果使用zxing完成上图所示例子讲解一遍,供初学者参考: 1.我们新建一个Winform测试项目; 2.从官网下载zxing开源项目,大概16m的样子,解压缩后打开zxing-2.1\csharp目录,将该目录拷贝到我们新建的Winform项目下(方便调试和看源码,并非一定要如此); 3.winform项目中添加对zxing项目的引用; 4.按上图所示例子建好控件,“生成条形码”的代码如下: 其中需要注意BarcodeFormat参数,可以打开定义看到具体的编码方式,自己百度每种编码方式对输入的要求。 这里EAN_13编码要求是13位长度的数字,并且满足:把所有偶数序号位上的数相加求和,用求出的和乘3,再把所有奇数序号上的数相加求和,用求出的和加上刚才偶数序号上的数,然后得出和能被10整除。(这个规则校验在UPCEANReader类的checkStandardUPCEANChecksum方法里面,如果不需要,可以去掉) 注意编码问题,在com.google.zxing.qrcode.encoder.Encoder类中修改默认编码为utf-8,否则解码出现的是乱码。 System.String DEFAULT_BYTE_MODE_ENCODING = "UTF-8"; 此处之前是"ISO-8859-1",之所以改成UTF-8是因为,在解码的时候程序会猜测可能的编码,如果猜测失败则默认是UTF-8,代码在com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的guessEncoding方法中。 所以此开源项目也缺少全局性思考,连编码和解码的默认编码方式都不一致。 经网友反映,还是有些中文会出现解码成乱码,而有些又可以,估计还是guessEncoding方法猜测编码出现了偏差,直接将guessEncoding方法写成返回UTF8就行了。 4.实现图片解码,即把条形码或二维码图片解码成其真实内容,当然在pc上应用不大,但可能只是还没发现而已,代码如下: opFilePath是图片路径,你可以用openFileDialog控件打开文件来得到路径。 注意: 点解码按钮前要先选择一张二维码或条形码图片,即先点击“…”按钮选择图片,然后再点“解码”按钮。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧