I'm curious and it could give my little app a nice finishing touch. Thanks!
You can't if you use the class FolderBrowserDialog
directly. But I read somewhere that it could be possible to change the title with P/Invoke and sending WM_SETTEXT
message.
In my opinion, it is not worth the pain. Just use the property Description
to add the information:
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.Description = "Select the document folder";
UseDescriptionForTitle
property on FolderBrowserDialog
. learn.microsoft.com/en-us/dotnet/api/… –
Ray UseDescriptionForTitle
did the job for me! Thanks @Ray –
Kathie The simple answer is that you can't. The dialog displays using the standard title for a folder browser style dialog on Windows. The best option is to ensure that you have meaningful descriptive text by setting the Description property.
Even if you were to use P/Invoke to call the SHBrowseForFolder Win32 API function directly, the only option you still can't change the actual title of the dialog. You can set the lpszTitle field of the BROWSEINFO structure, which is
A pointer to a null-terminated string that is displayed above the tree view control in the dialog box. This string can be used to specify instructions to the user.
lpfn
member of the BROWSEINFO
structure, you receive a handle to the dialog box". That handle unlocks use of the entire Win32 API for customizations. –
Welty Yes you can. There is a property for the FolderBrowserDialog
class called UseDescriptionForTitle
that indicates whether to use the value of the Description
property as the dialog title.
Here is a code snippet :
var dialog = new System.Windows.Forms.FolderBrowserDialog()
{
Description = "Choose a folder",
UseDescriptionForTitle = true
}
UseDescriptionForTitle = true
also removes the description text next to the selected folder. –
Cristacristabel You can change it by using:
SetWindowText (hwnd, "Select a Folder");
Where hwnd
is the window handle, which triggers the Browse For Folder Dialog.
I was looking up how to do this, but largely had to figure it out on my own. I hope this saves anyone some time:
Above my main method, I put:
[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);
Since I know that the thread will pause while the dialog is shown, I created a new thread to check for that dialog window while it exists. Like so:
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();
Then, I initiate the dialog:
using (var fbd = new FolderBrowserDialog())
{
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
{
//do stuff
}
}
This has worked for me, and it's not so complicated. Hope this helps anyone that might stumble on this page. By the way, remember that the thread must start before the dialog window is initiated, so that it can run and check for the window as soon as it exists.
© 2022 - 2024 — McMap. All rights reserved.