0

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

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

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

谢谢

4

3 回答 3

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 类。

于 2010-05-03T14:02:14.773 回答
-1

只需设置 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);
        }
    }
}
于 2010-05-03T07:41:08.747 回答
-1

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

于 2010-05-03T07:51:10.450 回答