如何在 LINQPad 中显示 FolderBrowserDialog?
How can I display a FolderBrowserDialog in LINQPad?
我想在 LINQPad 脚本中浏览文件夹,所以我尝试使用 FolderBrowserDialog。没用。
这是显示我在做什么的片段?
string path = "";
var browser = new FolderBrowserDialog { ShowNewFolderButton = false };
if (browser.ShowDialog() == DialogResult.OK)
{
path = browser.SelectedPath;
}
它在 ShowDialog() 行上运行并挂起,黄色执行指针指向该行,但文件夹浏览器对话框不可见。
我知道 ShowDialog() 有一个重载,它接受一个 IWin32Window owner
参数,我认为这可能是解决方案,但还没有弄清楚如何为主要的 LINQPad window。我希望 Util class 可以提供一种方法,但除非我遗漏了它,否则它似乎没有。
有人对解决这个问题有建议吗?
将 Run each query in its own process
选项设置为 true 是问题的原因。将该选项设置回默认值 false 允许上述代码按预期 运行。
但是,进行此更改会禁用 built-in 调试。此外,该行为仍然存在一些问题。
首先 运行 显示对话框,然后 运行 选择确定或取消后脚本完成。但是,在 运行 脚本第二次挂起时,如问题中所述。取消执行并再次 运行 后,对话框会显示,但在那之后它会再次挂起,依此类推。
有人指出,设置 Always use fresh application domains
选项可能会解决这个问题,而且确实如此,允许在每次执行脚本时显示对话框。
我刚刚在使用 LINQPad 5 时遇到了这个问题。我需要一个类似于文件选择器的文件夹选择器。您的解决方案无需我修改 LINQPad5 设置即可工作。问题是对话框停留在后台。所以这就是我如何让你的代码片段与焦点对话一起工作。我没有使用 FolderBrowseDialog.ShowDialog(),而是使用以 windows 形式传递的重载。我创建了一个带有描述和 window 位置的新表单,然后将其传递给 ShowDialog。这让我可以设置描述和 window 定位。
string path = "";
using ( var browser = new System.Windows.Forms.FolderBrowserDialog { ShowNewFolderButton = false })
{
browser.Description = "Select Folder For Foo Processing";
var form = new System.Windows.Forms.Form(){TopMost = true, TopLevel = true};
var result = browser.ShowDialog(form);
if (result == System.Windows.Forms.DialogResult.OK)
{
path = browser.SelectedPath;
}
}
path.Dump();
我尝试使用设置在 ShowDialog 中初始化表单,但遇到了问题所以我选择在显示对话框之前声明它。希望这可以帮助任何人解决这个问题。
不是解决方案,而是替代方案,FilePicker
控件(新 LinqPad 输入控件的一部分)。
你可以写:
new FilePicker().Dump().TextInput += (x, e) => ((FilePicker)x).Text.Dump();
或:
var picker = new FilePicker();
picker.TextInput += (x, e) => {
var fileName = picker.Text;
//action with the file...
};
完整示例:
void Main()
{
new FilePicker().Dump().TextInput += (x, e) => procces(((FilePicker)x).Text);
}
void procces(string file)
{
file.Dump("chosen file...");
//...
}
我想在 LINQPad 脚本中浏览文件夹,所以我尝试使用 FolderBrowserDialog。没用。
这是显示我在做什么的片段?
string path = "";
var browser = new FolderBrowserDialog { ShowNewFolderButton = false };
if (browser.ShowDialog() == DialogResult.OK)
{
path = browser.SelectedPath;
}
它在 ShowDialog() 行上运行并挂起,黄色执行指针指向该行,但文件夹浏览器对话框不可见。
我知道 ShowDialog() 有一个重载,它接受一个 IWin32Window owner
参数,我认为这可能是解决方案,但还没有弄清楚如何为主要的 LINQPad window。我希望 Util class 可以提供一种方法,但除非我遗漏了它,否则它似乎没有。
有人对解决这个问题有建议吗?
将 Run each query in its own process
选项设置为 true 是问题的原因。将该选项设置回默认值 false 允许上述代码按预期 运行。
但是,进行此更改会禁用 built-in 调试。此外,该行为仍然存在一些问题。
首先 运行 显示对话框,然后 运行 选择确定或取消后脚本完成。但是,在 运行 脚本第二次挂起时,如问题中所述。取消执行并再次 运行 后,对话框会显示,但在那之后它会再次挂起,依此类推。
有人指出,设置 Always use fresh application domains
选项可能会解决这个问题,而且确实如此,允许在每次执行脚本时显示对话框。
我刚刚在使用 LINQPad 5 时遇到了这个问题。我需要一个类似于文件选择器的文件夹选择器。您的解决方案无需我修改 LINQPad5 设置即可工作。问题是对话框停留在后台。所以这就是我如何让你的代码片段与焦点对话一起工作。我没有使用 FolderBrowseDialog.ShowDialog(),而是使用以 windows 形式传递的重载。我创建了一个带有描述和 window 位置的新表单,然后将其传递给 ShowDialog。这让我可以设置描述和 window 定位。
string path = "";
using ( var browser = new System.Windows.Forms.FolderBrowserDialog { ShowNewFolderButton = false })
{
browser.Description = "Select Folder For Foo Processing";
var form = new System.Windows.Forms.Form(){TopMost = true, TopLevel = true};
var result = browser.ShowDialog(form);
if (result == System.Windows.Forms.DialogResult.OK)
{
path = browser.SelectedPath;
}
}
path.Dump();
我尝试使用设置在 ShowDialog 中初始化表单,但遇到了问题所以我选择在显示对话框之前声明它。希望这可以帮助任何人解决这个问题。
不是解决方案,而是替代方案,FilePicker
控件(新 LinqPad 输入控件的一部分)。
你可以写:
new FilePicker().Dump().TextInput += (x, e) => ((FilePicker)x).Text.Dump();
或:
var picker = new FilePicker();
picker.TextInput += (x, e) => {
var fileName = picker.Text;
//action with the file...
};
完整示例:
void Main()
{
new FilePicker().Dump().TextInput += (x, e) => procces(((FilePicker)x).Text);
}
void procces(string file)
{
file.Dump("chosen file...");
//...
}