【问题标题】:Changing directory in Open File Dialog programatically以编程方式更改打开文件对话框中的目录
【发布时间】:2010-05-03 07:33:15
【问题描述】:

我有一个带有 ComboBox 的自定义 OpenFileDialog(VS2008、C#、Windows 窗体)。 ComboBox 将有一个用户可以选择的路径列表。

我的问题,有没有办法我可以更改打开文件对话框中的目录以指向组合框所选项目中的路径。

InitialDirectory 仅在我打开对话框之前有效,我想要一种在对话框打开后以编程方式更改目录的方法。

谢谢

【问题讨论】:

  • 这将如何工作?请解释更多。

标签: c# winforms openfiledialog


【解决方案1】:

如果您使用的是带有 .NET 3.5 SP1 的 Vista 或 Windows 7,我建议您使用 OpenFileDialog 上的 CustomPlaces 属性,而不是自定义组合框。

请参阅此 MSDN 文章(针对 WPF):http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.customplaces(v=VS.100).aspx

或这篇 MSDN 文章(适用于 Windows 窗体):http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.customplaces(v=VS.100).aspx

在 Windows 2000 和 XP 上,还可以自定义位置侧边栏。但它更难,需要你使用一些 C++ 代码(通过 CLI/C++ 可能是最好的)。该技术在这篇 MSDN 文章中有详细描述:http://msdn.microsoft.com/en-us/magazine/cc300434.aspx

如果您死心塌地使用已添加到 OpenFileDialog 的组合框,那么您可能只需要知道要发送到对话框的 Windows 消息。恐怕我不知道您需要发送哪条消息。 Common Open/Save 对话框的讨厌的内部 Win32 API 详细信息在此处详细介绍:http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

如果您可以确定将哪些消息发送到窗口,则可能的做法是在文件名文本字段中填充您要切换的目录以模拟 OK 按钮单击。如果您这样做,对话框将切换到该目录。

向此窗口发送消息可能需要您不直接使用 OpenFileDialog,而是将它所基于的抽象 FileDialog 类子类化。

【讨论】:

    【解决方案2】:

    只需设置openFileDialog1的InitialDirectory属性

    private void button1_Click(object sender, System.EventArgs e)
    {
        Stream myStream = null;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
    
        openFileDialog1.InitialDirectory = cmbPath.SelectedValue.ToString();
        openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
        openFileDialog1.FilterIndex = 2 ;
        openFileDialog1.RestoreDirectory = true ;
    
        if(openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        // Insert code to read the stream here.
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    }
    

    【讨论】:

    • 组合框嵌入在与打开对话框相同的自定义表单中。因此设置初始目录将不起作用,因为对话框已经打开。
    【解决方案3】:

    正如前面已经说过的,InitialDirectory 可以在手头工作,但你为什么要在后面更改文件夹? FileOpenDialog 是一个模态对话框,因此用户不能使用您的应用程序中的任何其他内容,而不是对话框。您不想设置文件夹的好处和原因是什么?您似乎使用了错误的工具来完成工作。

    【讨论】:

    • 组合框将包含用户可以使用的最近使用的路径。它实际上是在模拟 3Ds Max 中的 FileOpen。​​
    • 你能发个视频吗?您想要最近使用文件的历史列表吗?创建您自己的表单,结合使用 FileOpenDialog 和您自己的需求?
    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多