C Sharpの基礎 - ダイアログ

提供:MochiuWiki : SUSE, EC, PCB
2021年3月14日 (日) 06:18時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

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

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

フォルダ選択ダイアログ(FolderBrowserDialogクラス)は、System.Windows.Forms.CommonDialogクラスの派生クラスである。
ファイル選択ダイアログと比較すると、設定するプロパティは少ない。
ユーザにフォルダのパスを選択させるには、フォルダ選択ダイアログを使用する。


ファイル選択タイアログ

OpenFileDialogの主なプロパティ

下表に、ファイル選択ダイアログのプロパティのうち、設定を意識する必要がある主なプロパティを示す。

表. 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 ダイアログのタイトルバーに表示されるタイトル文字列を設定する。


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

  • AddExtension
  • CheckFileExists
  • CheckPathExists
  • ShowHelp


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

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

表. フィルタ文字列の設定例

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


ファイルの種類を複数設定する時、起動時に選択するファイルの種類を指定する場合は、
FilterIndexプロパティにインデックス値を指定する。(既定値 : 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);
    }
 }



ファイル保存ダイアログ

SaveFileDialogの主なプロパティ

下表に、ファイル保存ダイアログのプロパティのうち、設定を意識する必要がある主なプロパティを示す。

表. SaveFileDialogクラスの主なプロパティ

プロパティ名 データ型 意味
AddExtension bool 拡張子が入力されなかった場合、自動的に拡張子を付けるかどうかを設定する。
付ける場合はtrue、付けない場合はfalseを指定する。(既定値 : true)
CheckFileExists bool 存在しないファイルが指定された場合、警告メッセージを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)
CheckPathExists bool 存在しないパスが指定された場合、警告メッセージを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)
FileName string ユーザが選択したファイルパスを取得する。
ダイアログの起動時に初期値として設定することも可能。
Filter string ファイルの種類のプルダウンの選択肢リストを文字列で設定する。
FilterIndex int ファイルの種類のプルダウンの選択肢リストの初期選択インデックスを設定する。
インデックスの設定値は1から始まる。
ユーザが選択したインデックスを取得することも可能である。(既定値 : 1)
InitialDirectory string ダイアログの起動時に表示するディレクトリを設定する。
設定したディレクトリが存在しない場合は、設定しない場合と同じ動作となる。
OverwritePrompt bool ユーザが既に存在するパスを選択した場合に警告メッセージを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)
RestoreDirectory bool ダイアログを閉じる前に、ディレクトリを前に選択されていたディレクトリに戻すかどうかをを取得する。
戻す場合はtrue、戻さない場合はfalseを設定する。(既定値 : false)
ShowHelp bool ヘルプボタン[?]を表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : false)
Title string ダイアログのタイトルバーに表示されるタイトル文字列を設定する。


上表のプロパティにおいて、既定値のままでよい(設定が不要)と考えられるプロパティは、以下の5種類である。
拡張子の自動付加は必要であるため、既定値のtrueでよい。

ファイルの存在確認は不要であるため既定値のfalse、ディレクトリの存在確認は必要であるため既定値のtrueでよい。
また、ファイルが存在する場合の上書き確認は必要であるため、既定値のtrueでよい

  • AddExtension
  • CheckFileExists
  • CheckPathExists
  • OverwritePrompt
  • ShowHelp


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

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

表. フィルタ文字列の設定例

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


ファイルの種類を複数設定した時、起動時に選択するファイルの種類を指定する場合は、
FilterIndexプロパティにインデックス値を指定する。(既定値 : 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;
  
       // SaveFileDialog クラスのインスタンスを生成
       using (SaveFileDialog saveFileDialog = new SaveFileDialog())
       {
          // ファイルの種類リストを設定
          saveFileDialog.Filter = "テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
  
          // テキストボックスにファイル名(ファイルパス)が設定されている場合、そのファイルのディレクトリを初期表示にする
          if (fileName != string.Empty)
          {
             // FileInfoクラスのインスタンスを生成
             FileInfo fileInfo = new FileInfo(fileName);
 
             // ディレクトリー名 (ディレクトリーパス) を取得
             string directoryName = fileInfo.DirectoryName;
 
             // 存在する場合は InitialDirectory プロパティに設定
             if (Directory.Exists(directoryName))
             {
                saveFileDialog.InitialDirectory = directoryName;
             }
          }
  
          // ダイアログを表示
          DialogResult dialogResult = saveFileDialog.ShowDialog();
          if (dialogResult == DialogResult.Cancel)
          {
             // キャンセルされたので終了
             return;
          }
 
          // 選択されたファイル名(ファイルパス)をテキストボックスに設定
          this.textBox1.Text = saveFileDialog.FileName;
       }
    }
    catch (Exception ex)
    {
       MessageBox.Show(ex.Message);
    }
 }



フォルダ選択ダイアログ

FolderBrowserDialogクラスの主なプロパティ

下表に、フォルダ選択ダイアログ(FolderBrowserDialogクラス)のプロパティのうち、設定が必要な主なプロパティを示す。

表. フォルダ選択ダイアログ(FolderBrowserDialogクラス)の主なプロパティ

プロパティ名 データ型 意味
Description string ダイアログのフォルダツリービューの上部に表示する説明文を設定する。
RootFolder System.Environment.SpecialFolder ダイアログのフォルダツリービューのルートノード(先頭のノード)として設定するフォルダを、
SpecialFolder列挙体で設定する。
SelectedPath string
ShowNewFolderButton bool 新しいフォルダを作成するボタンを表示するかどうかを設定する。
表示する場合はtrue、表示しない場合はfalseを指定する。(既定値 : true)


フォルダ選択ダイアログで、既定値でよい(設定が不要)と思われるプロパティは、以下の1種類である。
新規フォルダの作成ボタンが存在する方が、ユーザに対して親切であるため、既定値でよい。

  • ShowNewFolderButton


サンプルコード

 /// <summary>
 /// ボタンがクリックされたときのイベント処理
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button1_Click(object sender, EventArgs e)
 {
    try
    {
       // テキストボックスからフォルダパスを取得
       string folderPath = this.textBox1.Text;
 
       // FolderBrowserDialogクラスのインスタンスを生成
       using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
       {
          // 説明文を設定(3行まで表示可能)
          folderBrowserDialog.Description = "フォルダを選択してください。";
 
          // ユーザが参照可能なフォルダを限定(特定のフォルダとそのサブフォルダのみ選択可能)
          folderBrowserDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
 
          // テキストボックスにフォルダパスが設定されている場合は選択する
          if (folderPath != string.Empty)
          {
             folderBrowserDialog.SelectedPath = folderPath;
          }
 
          // ダイアログを表示
          DialogResult dialogResult = folderBrowserDialog.ShowDialog();
          if (dialogResult == DialogResult.Cancel)
          {  // キャンセルされたので終了
             return;
          }
 
          // 選択されたフォルダパスをテキストボックスに設定
          this.textBox1.Text = folderBrowserDialog.SelectedPath;
       }
    }
    catch (Exception ex)
    {
       MessageBox.Show(ex.Message);
    }
 }