我很好奇,它可以给我的小应用程序一个很好的画龙点睛。谢谢!
答案 0 :(得分:27)
如果直接使用FolderBrowserDialog类,则不能。但我在某处读到可以用P / Invoke更改标题并发送WM_SETTEXT消息。
在我看来,这不值得痛苦。只需使用说明属性添加信息:
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.Description = "Select the document folder";
答案 1 :(得分:3)
简单的答案是,你做不到。该对话框使用Windows上的文件夹浏览器样式对话框的标准标题显示。最好的选择是通过设置Description属性来确保您具有有意义的描述性文本。
即使您使用P / Invoke直接调用SHBrowseForFolder Win32 API函数,唯一的选项仍然无法更改对话框的实际标题。您可以设置BROWSEINFO结构的lpszTitle字段,即
指向以null结尾的字符串的指针 显示在树视图上方 在对话框中控制。这个字符串 可用于指定指令 用户。
答案 2 :(得分:0)
您可以使用以下方法进行更改:
sqldf("select D.*, L.condition1 * D.[percentage_condition1] +
L.condition2 * D.[percentage_condition2] as new
from data as D
left join lookup as L
using(class, type)")
SetWindowText (hwnd, "Select a Folder");
是窗口句柄,它会触发“浏览文件夹”对话框。
答案 3 :(得分:-1)
我一直在寻找如何执行此操作的方法,但很大程度上必须自己解决。 我希望这可以节省一些时间:
我上面的主要方法是:
[DllImport("user32.dll", EntryPoint = "SetWindowText", CharSet = CharSet.Ansi)]
public static extern bool SetWindowText(IntPtr hWnd, String strNewWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Ansi)]
public static extern IntPtr FindWindow(string className, string windowName);
由于我知道在显示对话框时该线程将暂停,因此我创建了一个新线程来检查该对话框是否存在。像这样:
bool notfound = true;
new Thread(() => {
while (notfound)
{
//looks for a window with the title: "Browse For Folder"
IntPtr ptr = FindWindow(null, "Browse For Folder");
if (ptr != IntPtr.Zero)
{
//tells the while loop to stop checking
notfound = false;
//changes the title
SetWindowText(ptr, "Be happy!");
}
}
}).Start();
然后,我启动对话框:
using (var fbd = new FolderBrowserDialog())
{
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
{
//do stuff
}
}
这对我有用,并不复杂。希望这对可能偶然浏览此页面的人有所帮助。 顺便说一句,请记住线程必须在启动对话框窗口之前启动,以便它可以运行并在存在窗口后立即对其进行检查。