有谁知道如何在C#.NET中的Windows.Forms中的OpenFileDialog中更改按钮上的文本?
我编写了一个自定义对话框(表单),我可以在C#程序中使用它,其行为很像"文件 - 打开"菜单命令,并打开一个用户可以选择文件或目录的窗口.
我的问题是这个.它以"我的电脑"为根.我怎样才能在网络上搜索?如果文件或目录位于网络上.
或者更好的是,在Visual Studio 2010中,是否有一些我可以立即使用的固定FileOpenDialog?
我尝试在http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx上的示例代码中调用OpenFileDialog,
但编译器似乎不喜欢DialogResult.OK此行中使用的代码:
if(openFileDialog1.ShowDialog() == DialogResult.OK)
Run Code Online (Sandbox Code Playgroud)
编译器说:
错误1'System.Nullable'不包含'OK'的定义,并且没有扩展方法'OK'可以找到接受类型'System.Nullable'的第一个参数(你是否缺少using指令或汇编引用?)
我尝试使用命名空间Microsoft.Win32而不是System.Windows.Forms,但都没有工作.他们都产生了这个错误.
我如何使用OpenFileDialog类(在C#,WPF等中),以便它在网络区域默认打开?
这不起作用:
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "Network";
Run Code Online (Sandbox Code Playgroud)
我也尝试将"\"作为InitialDirectory,但是没有用.
我也尝试将"\\"作为InitialDirectory,但也没有用.
OpenFileDialog在Windows 7中未显示完整的文件名.还会报告connect.microsoft.com的问题.
设置还有一个工作openFileDialog.AutoUpgradeEnabled = false.但这会导致旧的xp样式对话框.有没有办法解决它而不做上述解决方法.对话框中没有窗口句柄,所以我无法弄清楚如何添加自定义窗口消息处理程序来执行sendmessage()来修复它.
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.FileName = "abcdefghijklmnopqrstuvwxyz";
openFileDialog.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

我有一个WinForms应用程序部署到同一办公室的多台机器上.在本周一之前,办公室中的所有用户都没有使用该应用程序,并使用OpenFileDialog选择要导入的文件.一台机器有很多其他应用程序的更新,现在我们的应用程序试图显示OpenFileDialog冻结.它显示OpenFolderDialog很好; 虽然我没有尝试SaveFileDialog.重复一遍,它上周工作,我们的应用程序没有更新,但它本周冻结在一台机器上,而它适用于办公室中的所有其他机器.
有问题的机器安装了另一个.NET应用程序,我验证了OpenFileDialog在其他应用程序中打开没有问题.
有关为什么OpenFileDialog会冻结在一台机器上的任何想法?有想法该怎么解决这个吗?我们可以尝试重新安装而不知道原因,但我认为最好调查为什么要防止它再次发生.
我在 wpf 应用程序中使用 Microsoft.Win32.OpenFileDialog,因为它在此处声明为等效;http://msdn.microsoft.com/en-us/library/ms750559.aspx
我将 RestoreDirectory 属性设置为 true,但它没有任何效果。当我等待该属性时,记录为“此属性未实现”。
那么如何在不自己实现逻辑的情况下完成这项任务呢?
我想将InitialDirectorya的属性设置WindowsAPICodePack CommonOpenFileDialog为我的计算机位置,我使用等效的CLSID或GUID或这到底是什么,只是我想知道是否存在更本地/安全的方法来正确设置我的计算机位置,我试过这个,但没有奏效:
.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
Dim FolderPicker As New Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog
With FolderPicker
.IsFolderPicker = True
.Title = "Folder Dialog Test"
.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" ' My Computer
.DefaultFileName = "C:\"
End With
Run Code Online (Sandbox Code Playgroud)
更新:
我在 Windows 8 x64 上。
其他特殊文件夹(例如库和桌面)的工作方式如下:
.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Run Code Online (Sandbox Code Playgroud) 我有这个简单的代码:
private void buttonOpen_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox2.Text = openFileDialog1.FileName;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,窗体不显示并退出调试模式。
在输出视图中写道:程序 '[4244] openfiledialog.vshost.exe: Managed (v4.0.30319)' 已退出,代码为 1073741855 (0x4000001f)。
我有 Visual Studio 2010 专业版。
编辑:form1.designer.cs
private void InitializeComponent()
{
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.buttonOpen = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// buttonOpen
//
this.buttonOpen.Location = new System.Drawing.Point(13, 48);
this.buttonOpen.Name = "buttonOpen";
this.buttonOpen.Size = new System.Drawing.Size(75, 23);
this.buttonOpen.TabIndex = …Run Code Online (Sandbox Code Playgroud) 我们正在使用CustomPlacesOpen/SaveFileDialog 的属性向用户显示他们可以使用的各种配置的标准文件夹。
我们现在想要的是让InitialDirectory属性指向创建的CustomPlaces“文件夹”。有没有人能够做到这一点?
我已经阅读了有关FileDialog类(以及子序列 OpenFileDialog 和 SaveFileDialog)、InitialDirectory属性、Environment.SpecialFolder枚举器和KNOWNFOLDERID列表的 MSDN 文章,但都无济于事。
我还尝试将InitialDirectory属性设置为应用程序的名称,以防万一这很神奇。
用于 OpenFileDialog 的代码(目录是 demos atm):
using (OpenFileDialog tempDiag = new OpenFileDialog())
{
tempDiag.CustomPlaces.Add(@"C:\Temp\");
tempDiag.CustomPlaces.Add(@"C:\Program Files\");
tempDiag.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
调用时所需的默认选择tempDiag.ShowDialog();:
我知道可以通过这篇CodeProject文章中描述的方法完全自定义 XOpenDialog ,但我觉得这对于此时的默认选择来说有点极端。
在我WPF使用Caliburn.Micro和MahApps.Metro框架的应用程序中,我打开OpenFileDialog了System.Windows.Forms命名空间中的实例。打开和关闭此对话框后,我的应用程序的其余部分挂起大约 3 到 4 秒。使用Microsoft.Win32命名空间时也是如此。
我自己做了一些研究,并提出了一些抱怨同一问题的帖子,他们找到的解决方案有两个:
ShowHelp属性设置为trueSingle Threaded Apartment模式下运行。该ShowHelp修复程序通过使用非 vista 样式对话框对我有用,但从UXWindows Vista 和更新版本的角度来看,它看起来不正确。对我来说另一件事是确保它处于STA模式下。
WPFSTA默认情况下使用,但我尝试编写自己的主要方法并明确说明[STA]但没有运气。我将以下代码段添加到我的代码中,但输出为State: STA,表明应该没有问题。
Console.WriteLine("State: {0}", System.Threading.Thread.CurrentThread.GetApartmentState());
var dialog = new OpenFileDialog
Run Code Online (Sandbox Code Playgroud)
我也试过OpenFileDialog在一个新STA线程上启动它,虽然它启动并且没有挂起我的应用程序,但它也不再是模态的。我也尝试加入新线程,但关闭后它仍然挂起。
是否存在已知的潜在问题,OpenFileDialog如果有,是否有启动 FileDialogs 的替代方法可以避免这种挂起?
来源ShowHelp和STA评论: