首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么FolderBrowserDialog对话框不滚动到选定的文件夹?

为什么FolderBrowserDialog对话框不滚动到选定的文件夹?
EN

Stack Overflow用户
提问于 2011-08-04 21:19:03
回答 11查看 47.7K关注 0票数 79

如此屏幕截图所示,所选文件夹不在视图中。需要向下滚动才能查看选定的文件夹。

同一对话框显示在不同计算机上可见的选定文件夹

我在两台都安装了windows7的电脑上运行它,其中一台运行正常,而第二台运行不正常。它看起来是windows环境的问题,而不是一些代码问题?有没有人能给我一些建议呢?

代码没有变化。我使用了来自不同驱动器的较长路径,但结果是相同的。

private void TestDialog_Click ( object sender, EventArgs e )
        {
            //Last path store the selected path, to show the same directory as selected on next application launch.
            //Properties.Settings.Default.LastPath

            FolderBrowserDialog dlgFolder = new FolderBrowserDialog ();

            dlgFolder.RootFolder = Environment.SpecialFolder.DesktopDirectory;

            dlgFolder.SelectedPath = Properties.Settings.Default.LastPath;

            if (dlgFolder.ShowDialog () == System.Windows.Forms.DialogResult.OK)
            {

                Properties.Settings.Default.LastPath = dlgFolder.SelectedPath;               

                Properties.Settings.Default.Save ();
            }

        }
EN

回答 11

Stack Overflow用户

发布于 2016-09-10 12:07:21

我知道这个线程很老了,但是使用扩展方法,可以将它添加到FolderBrowserDialog.ShowDialog方法中,然后在需要的地方重复使用。

示例(如下)只是使用了简单的SendKeys方法(我讨厌这样做,但在本例中,它工作得很好)。当使用SendKeys方法跳转到对话框中选定的文件夹时,如果您在Visual Studio中调试,则SendKeys调用将应用于当前窗口,该窗口将是活动的VS窗口。为了更加可靠并避免错误的窗口获得SendKeys消息,扩展方法将包含外部方法调用,以将消息发送到特定窗口,类似于Marc F发布的消息,但已转换为C#。

internal static class FolderBrowserDialogExtension
{
    public static DialogResult ShowDialog(this FolderBrowserDialog dialog, bool scrollIntoView)
    {
        return ShowDialog(dialog, null, scrollIntoView);
    }

    public static DialogResult ShowDialog(this FolderBrowserDialog dialog, IWin32Window owner, bool scrollIntoView)
    {
        if (scrollIntoView)
        {
            SendKeys.Send("{TAB}{TAB}{RIGHT}");
        }

        return dialog.ShowDialog(owner);
    }
}
票数 11
EN

Stack Overflow用户

发布于 2015-04-17 14:25:41

我使用了https://www.daniweb.com/software-development/csharp/threads/300578/folderbrowserdialog-expanding-the-selected-directory-中的一个变通方法

FolderBrowserDialog^ oFBD = gcnew FolderBrowserDialog;
oFBD->RootFolder = Environment::SpecialFolder::MyComputer;
oFBD->SelectedPath = i_sPathImport;
oFBD->ShowNewFolderButton = false;     // use if appropriate in your application
SendKeys::Send ("{TAB}{TAB}{RIGHT}");  // <<-- Workaround
::DialogResult oResult = oFBD->ShowDialog ();

这不是最好的方式,但它对我很有效。

如果没有RootFolder,它不会在第一次调用时起作用,但在第二次和第二次调用时就会起作用。有了它,它总是有效的。

正如其他人所观察到的那样,此故障取决于操作系统:

我正在使用Win 7专业版x64 SP1

票数 9
EN

Stack Overflow用户

发布于 2016-08-09 02:21:40

在VB.Net代码中,只需在显示对话框之前放置此行代码即可。

SendKeys.Send ("{TAB}{TAB}{RIGHT}")
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6942150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档