C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 43 を表示中)
■22677 / )  Re[3]: ファイル選択ダイアログについて
□投稿者/ 魔界の仮面弁士 (794回)-(2008/07/29(Tue) 16:38:58)
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 クラスから実装せねばならない様子。

返信 編集キー/


管理者用

- Child Tree -