「C Sharpの基礎 - ダイアログ」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
(Wiki がページ「ファイルを開くダイアログ」を「ファイルを開くダイアログ(C Sharp)」に、リダイレクトを残さずに移動しました)

2020年2月5日 (水) 00:04時点における版

概要

ファイルを開くダイアログ(OpenFileDialog)は、ファイルの参照をするための機能を持ったダイアログである。
ファイルを開くダイアログは、System.Windows.Forms.FileDialogの派生クラスであり、ファイルを開く操作に必要なプロパティが存在する。
ユーザに開くファイルのパスを選択させるにはファイルを開くダイアログ(OpenFileDialog)を使用する。

OpenFileDialogの主なプロパティ

ファイルを開くダイアログのプロパティのうち、設定を意識する必要がある主なプロパティは表1に記載した次の15種類である。

表1. OpenFileDialogの主なプロパティ
プロパティ名 データ型 意味
AddExtension bool 拡張子が入力されなかった場合、自動的に拡張子を付けるかどうかを設定する。
付ける場合はtrue、付けない場合はfalseを指定する。(既定値 : true)
CheckFileExists bool 存在しないファイルが指定された場合、警告メッセージを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)
CheckPathExists bool 存在しないパスが指定された場合、警告メッセージを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)
FileName string ユーザが選択したファイルパスを取得する。
ダイアログの起動時に初期値として設定することも可能。
FileNames string[] ユーザが選択した複数のファイルパスを取得する。
Multiselectプロパティがtrueの場合に使用する。
Multiselectプロパティがfalseの場合は、FileNameで取得できるファイルパスがFileNames[0]に格納される。
Filter string ファイルの種類のプルダウンの選択肢リストを文字列で設定する。
FilterIndex int ファイルの種類のプルダウンの選択肢リストの初期選択インデックスを設定する。
インデックスの設定値は1から始まる。
ユーザが選択したインデックスを取得することも可能である。(既定値 : 1)
InitialDirectory string ダイアログの起動時に表示するディレクトリを設定する。
設定したディレクトリが存在しない場合は、設定しない場合と同じ動作となる。
Multiselect bool 複数のファイルを選択できるかどうかを設定する。
複数選択を許可する場合はtrue、許可しない場合はfalseを指定する。(既定値 : false)
ReadOnlyChecked bool 読み取り専用として開くチェックボックスのON/OFFを設定または取得する。
ShowReadOnlyプロパティがtrueの場合のみ有効となる。(既定値 : false)
SafeFileName string ユーザが選択した拡張子を含むファイル名のみ(パスは含まない)を取得する。
SafeFileNames string[] ユーザが選択した複数の拡張子を含むファイル名のみ(パスは含まない)を取得する。
Multiselectプロパティがtrueに設定されている場合のみ有効となる。
ShowHelp bool ヘルプボタン[?]を表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : false)
ShowReadOnly bool 読み取り専用として開くチェックボックスを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : false)
Title string ダイアログのタイトルバーに表示されるタイトル文字列を設定する。


表1で記載したプロパティにおいて、既定値のままでよい(設定が不要)と考えられるプロパティは次の4種類である。
拡張子の自動付加は必要なので既定値のtrueでよい。また、ファイル、ディレクトリの存在確認は必要なので既定値のtrueでよい。

  • AddExtension
  • CheckFileExists
  • CheckPathExists
  • ShowHelp



Filterプロパティ(ファイルの種類)の設定

ダイアログで開くことができるファイルの種類は、Filterプロパティにフィルタ文字列を設定する。
フィルタ文字列は、ファイルの説明とファイルの拡張子をバーティカルバーで区切って表現する。

表2. フィルタ文字列の設定例
フィルタ フィルタ文字列
すべてのファイル *.*"
テキストファイル *.txt"
テキストファイルとすべてのファイル *.txt|すべてのファイル (*.*)|*.*"
XMLファイル *.xml"
HTMLファイル *.html;*.htm"
XMLファイルとHTMLファイルとすべてのファイル *.xml|HTML ファイル (*.html, *.htm)|*.html;*.htm|すべてのファイル (*.*)|*.*"
イメージファイル *.png;*.jpg;*.gif;*bmp"

ファイルの種類を複数設定した時、起動時に選択するファイルの種類を指定する場合はFilterIndexプロパティにインデックス値を指定する。(既定値 : 1)
プルダウンの先頭の項目は1、2番目の項目は2を設定する。(プルダウンのインデックスは、1から始まるので注意)
ユーザが選択したファイルの種類を保持しておき、次回に選択するファイルの種類を設定する場合には便利なプロパティである。

サンプルコード

 /// <summary>
 /// ボタンがクリックされたときのイベント処理
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button1_Click(object sender, EventArgs e)
 {
    try
    {
       // テキストボックスからファイル名(ファイルパス)を取得
       string fileName = this.textBox1.Text;
  
       // OpenFileDialog クラスのインスタンスを生成
       using (OpenFileDialog openFileDialog = new OpenFileDialog())
       {
          // ファイルの種類リストを設定
          openFileDialog.Filter = "テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
  
          // テキストボックスにファイル名(ファイルパス)が設定されている場合、そのファイルのディレクトリを初期表示にする
          if (fileName != string.Empty)
          {
             // FileInfoクラスのインスタンスを生成
             FileInfo fileInfo = new FileInfo(fileName);
 
             // ディレクトリー名 (ディレクトリーパス) を取得
             string directoryName = fileInfo.DirectoryName;
 
             // 存在する場合は InitialDirectory プロパティに設定
             if (Directory.Exists(directoryName))
             {
                openFileDialog.InitialDirectory = directoryName;
             }
          }
 
          // ファイルの複数選択を許可する
          //openFileDialog.Multiselect = true;
 
          // ダイアログを表示
          DialogResult dialogResult = openFileDialog.ShowDialog();
          if (dialogResult == DialogResult.Cancel)
          {
             // キャンセルされたので終了
             return;
          }
 
          // 複数選択した全てのファイル名を取得
          //string[] fileNames = openFileDialog.FileNames;
 
          // 選択されたファイル名(ファイルパス)をテキストボックスに設定
          this.textBox1.Text = openFileDialog.FileName;
       }
    }
    catch (Exception ex)
    {
       MessageBox.Show(ex.Message);
    }
 }