2008/07/29(Tue) 16:43:10 編集(投稿者)
# 使用言語は VB.NET のようですが、
# 分類:[VB.NET/VB2005]
# ではなく、
# 分類:[.NET 全般]
# にしてあるようなので、C# ベースの回答でも大丈夫という事ですよね。
■No22669 (ももたろ さん) に返信
>>http://dobon.net/vb/dotnet/form/folderdialog.html
> これですとフォルダの指定はできるのですが、ファイルの指定ができないので
提示の URL からリンクされている
http://support.microsoft.com/kb/306285/ja
の方法でいえば、サンプルの FolderBrowser クラス内に
public bool BrowseForEverything {
get { return (publicOptions & (int)Win32API.Shell32.BffStyles.BrowseForEverything) != 0; }
set { SetOptionField((int)Win32API.Shell32.BffStyles.BrowseForEverything, value); }
}
というプロパティを用意すれば、ファイルも表示されるようになります。
> ファイルを指定できるダイアログを表示して、さらに「開く」ボタンを「選択」といったように文言を変更
コモンダイアログの拡張と言えば、
http://msdn.microsoft.com/en-us/library/ms996463.aspx
http://www.vbstation.net/spec/S3.htm
このあたりかな。
MSDN のサンプルで言えば、MyHookProc メソッドのコードを
case WindowMessage.InitDialog:
{
IntPtr hWndParent = NativeMethods.GetParent( hWnd );
NativeMethods.SetParent( _userControl.Handle, hWndParent );
#region これを追加
const uint ID_OK = 1;
const uint CDM_SETCONTROLTEXT = 0x468;
StringBuilder sb = new StringBuilder("選択");
UInt32 ret = NativeMethods.SendMessage(
hWndParent, CDM_SETCONTROLTEXT, ID_OK, sb);
#endregion
return IntPtr.Zero;
}
のように書き換えれば OK です。
HookProc メソッドをオーバーライドしても実装できそうだけれども、残念ながら
OpenFileDialog がシール型なので、CommonDialog クラスから実装せねばならない様子。