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

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

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

Re[6]: ファイル選択ダイアログについて


(過去ログ 43 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■22666 / inTopicNo.1)  ファイル選択ダイアログについて
  
□投稿者/ ももたろ (1回)-(2008/07/29(Tue) 15:25:47)

分類:[.NET 全般] 

VB.NETでファイルを選択させる為、「OpenFileDialog」メソッドを使用しているのですが、
表示されるダイアログのボタンが「開く」、「キャンセル」となっています。

「開く」ボタンを「選択」ボタンに表示を変更できないでしょうか。

※ダイアログにて選択したファイルは実際に開くわけではなく、ファイルのパスを取得するのが目的なので
 ボタンの文言を変えたいのですが・・・

どなたか方法を教えて頂けないでしょうか。
宜しくお願い致します。
引用返信 編集キー/
■22667 / inTopicNo.2)  Re[1]: ファイル選択ダイアログについて
□投稿者/ ま (88回)-(2008/07/29(Tue) 15:37:10)
No22666 (ももたろ さん) に返信

それなら、SHBrowseForFolder とかってメソッドがあったような記憶。

http://dobon.net/vb/dotnet/form/folderdialog.html

これだ。
引用返信 編集キー/
■22669 / inTopicNo.3)  Re[2]: ファイル選択ダイアログについて
□投稿者/ ももたろ (3回)-(2008/07/29(Tue) 15:48:42)
No22667 (ま さん) に返信

ま さん早速のご回答ありがとうございました。

>
> それなら、SHBrowseForFolder とかってメソッドがあったような記憶。
>
> http://dobon.net/vb/dotnet/form/folderdialog.html
>
> これだ。

これですとフォルダの指定はできるのですが、ファイルの指定ができないので
ファイルを指定できるダイアログを表示して、さらに「開く」ボタンを「選択」といったように文言を変更
できればよいのですが・・・


引用返信 編集キー/
■22677 / inTopicNo.4)  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 クラスから実装せねばならない様子。

引用返信 編集キー/
■22679 / inTopicNo.5)  Re[4]: ファイル選択ダイアログについて
□投稿者/ ももたろ (4回)-(2008/07/29(Tue) 16:53:40)
No22677 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士さんご回答ありがとうございます。

> # 使用言語は VB.NET のようですが、
> #   分類:[VB.NET/VB2005]
> # ではなく、
> #   分類:[.NET 全般]
> # にしてあるようなので、C# ベースの回答でも大丈夫という事ですよね。
>
すいません。分類を間違えていました。
分類:[VB.NET/VB2005]で開発しています。

>
> ■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 クラスから実装せねばならない様子。

ありがとうございました。参考にさせて頂きます。

引用返信 編集キー/
■22700 / inTopicNo.6)  Re[4]: ファイル選択ダイアログについて
□投稿者/ Azulean (174回)-(2008/07/29(Tue) 23:22:01)
No22677 (魔界の仮面弁士 さん) に返信
> MSDN のサンプルで言えば、MyHookProc メソッドのコード

この手法って、Vista SP1だと実現できないかもしれません。
Vista SP1以降だと、新しいコモンダイアログが自動的に適用されます。
AutoUpgradeEnabledプロパティをfalseにすれば元の古いダイアログに戻りますが、このプロパティは.NET 2.0のSPなしバージョンには存在しないので、静的に設定できないし…。

参考URL
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.filedialog.autoupgradeenabled.aspx
> この FileDialog インスタンスを Windows Vista で実行する場合に、外観と動作を自動的にアップグレードする場合は true
> それ以外の場合は false。既定値は true です。

http://msdn.microsoft.com/en-us/library/bb776913.aspx
> Enables simple customization of the dialog, such as setting the label on the OK button, without requiring a hook procedure.

http://msdn.microsoft.com/en-us/library/ms646927.aspx
> Note Starting with Windows Vista, the Common File Dialog has been superseded by the Common Item Dialog when used to open a file.
> We recommended that you use the Common Item Dialog API instead of the Common File Dialog API in this case.
> For more information, please see Common Item Dialog.

http://msdn.microsoft.com/ja-jp/library/dk77e5e7.aspx
> Windows Vista では、CFileDialog を使用する場合のコントロール ID のシステムが以前のバージョンの Windows から変更されています。
> 以前のバージョンの Windows からプロジェクトを移植するには、CFileDialog コントロールへのすべての参照をまず更新する必要があります。

引用返信 編集キー/
■22708 / inTopicNo.7)  Re[5]: ファイル選択ダイアログについて
□投稿者/ 魔界の仮面弁士 (798回)-(2008/07/30(Wed) 09:42:08)
2008/07/30(Wed) 10:11:49 編集(投稿者)

No22700 (Azulean さん) に返信
>>MSDN のサンプルで言えば、MyHookProc メソッドのコード
> この手法って、Vista SP1だと実現できないかもしれません。
Vista Biz/SP1 上で試してみましたが、
 const uint ID_OK = 1;
 const uint CDM_SETCONTROLTEXT = 0x468;
 StringBuilder sb = new StringBuilder("選択");
 UInt32 ret = NativeMethods.SendMessage(hWndParent, CDM_SETCONTROLTEXT, ID_OK, sb);
のコードのままで、[OK] → [選択] への切り替えが行われる事を確認できました。


> Vista SP1以降だと、新しいコモンダイアログが自動的に適用されます。
旧ダイアログは GetOpenFileName API ですが、Vista ダイアログを出すには、 IFileDialog インターフェイスという
COM ベースの API を呼び出さねばなりませんので、その切り替えは自動的に行われるものでは無いと思います。
少なくとも P/Invoke の場合は。


> AutoUpgradeEnabledプロパティをfalseにすれば元の古いダイアログに戻りますが、
それは、今回のサンプルにあるアンマネージコードのダイアログではなく、
マネージの System.Windows.Forms.OpenFileDialog の話では無いでしょうか。

マネージ版の場合は、AutoUpgradeEnabled と OS 判定を元にして、
内部で Vista 版 API を呼ぶか、従来版 API を呼ぶかを切り替える仕様になっていますね。
引用返信 編集キー/
■22733 / inTopicNo.8)  Re[6]: ファイル選択ダイアログについて
□投稿者/ Azulean (175回)-(2008/07/30(Wed) 22:25:15)
No22708 (魔界の仮面弁士 さん) に返信
>>Vista SP1以降だと、新しいコモンダイアログが自動的に適用されます。
> 旧ダイアログは GetOpenFileName API ですが、Vista ダイアログを出すには、 IFileDialog インターフェイスという
> COM ベースの API を呼び出さねばなりませんので、その切り替えは自動的に行われるものでは無いと思います。
> 少なくとも P/Invoke の場合は。
はい、その通りです。
私の早とちり(OpenFileDialogベースで書いていると誤認)で書いてました、申し訳ありません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -