連載:Windowsフォーム開発入門【Visual Studio 2010対応】

Windowsフォーム・コントロールの基礎(その2)

初音 玲
2010/09/14
Page1 Page2 Page3

ダイアログ

 [ツールボックス]の[ダイアログ]タブに含まれているコントロールは、いろいろな種類のダイアログ画面を表示するためのものだ。特にファイル関連のダイアログの利便性は高く、(ファイルを開いたり保存したりする必要がある場合に)このダイアログを使うことでWindowsフォームでの開発を確実に効率化できる。

ColorDialogコントロール

 ColorDialogコントロール(以下、ColorDialog)は、ガイドラインには「コモン・ダイアログ・ボックス」の「色」として規定されていて、利用者(=エンド・ユーザー)に色を指定させるためのダイアログ(図7参照)を表示する(なお、「ダイアログ」は「ダイアログ・ボックス」を省略した用語)。ColorDialogを表示するためのコマンド名としては[色(C)...]または[色の選択(C)...]が推奨されている。

図7 ColorDialogの表示例

 下記のコードは、ボタンがクリックされたときにColorDialogを表示して、そこで利用者が選択した色をテキスト・ボックスの背景色に設定するサンプル・コード。

Private Sub Color_Button_Click(ByVal sender As System.Object,
                               ByVal e As System.EventArgs) _
                           Handles Color_Button.Click
  Me.ColorDialog1.AllowFullOpen = False
  If Me.ColorDialog1.ShowDialog = DialogResult.OK Then
    Me.Color_TextBox.BackColor = Me.ColorDialog1.Color
  End If
End Sub
private void Color_Button_Click(object sender, EventArgs e)
{
  this.ColorDialog1.AllowFullOpen = false;
  if (this.ColorDialog1.ShowDialog() == DialogResult.OK)
  {
    this.Color_TextBox.BackColor = this.ColorDialog1.Color;
  }
}
リスト1 ColorDialogの使用例(上:VB、下:C#)

FolderBrowserDialogコントロール

 FolderBrowserDialogコンロトール(以下、FolderBrowserDialog)は、ガイドラインには「コモン・ダイアログ・ボックス」の「フォルダを開く」として規定されていて、利用者にフォルダを選択させるためのダイアログ(図8参照)を表示する。FolderBrowserDialogを表示するためのコマンド名としては[フォルダーを開く(F)...]または[フォルダーの選択(F)...]が推奨されている。

図8 FolderBrowserDialogの表示例

 下記のコードは、ボタンがクリックされたときにFolderBrowserDialogを表示して、そこで利用者が選択したフォルダのパスをテキスト・ボックスに設定するサンプル・コード。

Private Sub FolderBrowser_Button_Click(
                                  ByVal sender As System.Object,
                                  ByVal e As System.EventArgs) _
                              Handles FolderBrowser_Button.Click
  Me.FolderBrowserDialog1.Description = "説明文"
  Me.FolderBrowserDialog1.ShowNewFolderButton = True
  Me.FolderBrowserDialog1.RootFolder = _
      Environment.SpecialFolder.MyDocuments
  If Me.FolderBrowserDialog1.ShowDialog = DialogResult.OK Then
    Me.FolderBrowser_TextBox.Text = _
      Me.FolderBrowserDialog1.SelectedPath
  End If
End Sub
private void FolderBrowser_Button_Click(object sender, EventArgs e)
{
  this.FolderBrowserDialog1.Description = @"説明文";
  this.FolderBrowserDialog1.ShowNewFolderButton = true;
  this.FolderBrowserDialog1.RootFolder =
    Environment.SpecialFolder.MyDocuments;
  if (this.FolderBrowserDialog1.ShowDialog() == DialogResult.OK)
  {
    this.FolderBrowser_TextBox.Text =
      this.FolderBrowserDialog1.SelectedPath;
  }
}
リスト2 FolderBrowserDialog の使用例(上:VB、下:C#)

 FolderBrowserDialogのプロパティで注意が必要なのはRootFolderプロパティだろう。RootFolderプロパティはダイアログの初期表示として「マイ ドキュメント」などの特殊なフォルダを開きたいときに使用する。もし、特殊なフォルダ以外を初期表示としたいときは、RootFolderプロパティは指定せずにSelectedPathプロパティに該当するフォルダのパスを指定してからShowDialogメソッドを呼ぶ。

FontDialogコントロール

 FontDialogコントロール(以下、FontDialog)は、ガイドラインには「コモン・ダイアログ・ボックス」の「フォント」として規定されていて、利用者にフォントを選択させるためのダイアログ(図9参照)を表示する。FontDialogを表示するためのコマンド名としては[フォント(F)...]または[フォントの選択(F)...]が推奨されている。

図9 FontDialogの表示例

 下記のコードは、ボタンがクリックされたときにFontDialogを表示して、そこで利用者が選択したフォントをテキスト・ボックスのフォントとして設定するサンプル・コード。

Private Sub Font_Button_Click(ByVal sender As System.Object,
                              ByVal e As System.EventArgs) _
                          Handles Font_Button.Click
  Me.FontDialog1.Font = Me.Font_TextBox.Font
  If Me.FontDialog1.ShowDialog = DialogResult.OK Then
    Me.Font_TextBox.Font = Me.FontDialog1.Font
    Me.Font_TextBox.Text = Me.FontDialog1.Font.Name
  End If
End Sub
private void Font_Button_Click(object sender, EventArgs e)
{
  this.FontDialog1.Font = this.Font_TextBox.Font;
  if (this.FontDialog1.ShowDialog() == DialogResult.OK)
  {
    this.Font_TextBox.Font = this.FontDialog1.Font;
    this.Font_TextBox.Text = this.FontDialog1.Font.Name;
  }
}
リスト3 FontDialogの使用例(上:VB、下:C#)

OpenFileDialogコントロール

 OpenFileDialogコントロール(以下、OpenFileDialog)は、ガイドラインには「コモン・ダイアログ・ボックス」の「ファイルを開く」として規定されていて、利用者にファイルを選択させるためのダイアログ(図10参照)を表示する。OpenFileDialogを表示するためのコマンド名としては[開く(O)...]が推奨されている。

図10 OpenFileDialogの表示例

 下記のコードは、ボタンがクリックされたときにOpenFileDialogを表示して、そこで利用者が選択したJPEGファイルの名前をテキスト・ボックスに設定するサンプル・コード。

Private Sub Open_Button_Click(ByVal sender As System.Object,
                              ByVal e As System.EventArgs) _
                          Handles Open_Button.Click
  If Me.Open_TextBox.Text.Length = 0 Then
    Me.OpenFileDialog1.FileName = "*.jpg"
    Me.OpenFileDialog1.InitialDirectory =
      Environment.GetFolderPath( _
        Environment.SpecialFolder.MyPictures)
  Else
    Me.OpenFileDialog1.FileName =
      System.IO.Path.GetFileName(Me.Open_TextBox.Text)
    Me.OpenFileDialog1.InitialDirectory =
      System.IO.Path.GetDirectoryName(Me.Open_TextBox.Text)
  End If
  Me.OpenFileDialog1.DefaultExt = "jpg"
  Me.OpenFileDialog1.Filter = "JPEG (*.jpg)|*.jpg|すべて(*.*)|*.*"
  Me.OpenFileDialog1.FilterIndex = 1
  Me.SaveFileDialog1.RestoreDirectory = True
  Me.OpenFileDialog1.Title = "ファイルを開く"
  If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
    Me.Open_TextBox.Text = Me.OpenFileDialog1.FileName
  End If
End Sub
private void Open_Button_Click(object sender, EventArgs e)
{
  if (this.Open_TextBox.Text.Length == 0) {
    this.OpenFileDialog1.FileName = @"*.jpg";
    this.OpenFileDialog1.InitialDirectory =
      Environment.GetFolderPath(
        Environment.SpecialFolder.MyPictures);
  } else {
    this.OpenFileDialog1.FileName =
      System.IO.Path.GetFileName(this.Open_TextBox.Text);
    this.OpenFileDialog1.InitialDirectory =
      System.IO.Path.GetDirectoryName(this.Open_TextBox.Text);
  }
  this.OpenFileDialog1.DefaultExt = @"jpg";
  this.OpenFileDialog1.Filter =
    @"JPEG(*.jpg)|*.jpg|すべて(*.*)|*.*";
  this.OpenFileDialog1.FilterIndex = 1;
  this.SaveFileDialog1.RestoreDirectory = true;
  this.OpenFileDialog1.Title = @"ファイルを開く";
  if (this.OpenFileDialog1.ShowDialog() == DialogResult.OK) {
    this.Open_TextBox.Text = this.OpenFileDialog1.FileName;
  }
}
リスト4 OpenFileDialogの使用例(上:VB、下:C#)

 OpenFileDialogは、初回表示時、つまり利用者がファイルを指定していない段階では「マイ ドキュメント」や「マイ ピクチャ」などの適切なフォルダを表示し、2回目以降は最後にOpenFileDialogで指定したファイルの存在するフォルダを表示するとガイドラインにある。

 そのため、リスト4ではテキスト・ボックスに値が設定されていない(=Lengthプロパティが「0」)ときは「マイ ピクチャ」フォルダをInitialDirectoryプロパティに指定し、それ以外はGetDirectoryNameメソッドにより直前に指定したファイル名からフォルダ名を抜き出して、それをInitialDirectoryプロパティに指定している。

 なお、OpenFileDialogはあくまでもファイルを指定するダイアログなので、リスト4のコードだけではデータをファイルから読み込むことはできない。従って、ShowDialogメソッドの結果が「DialogResult.OK」だった場合には、OpenFileDialogのOpenFileメソッドを実行して読み込み用のストリーム(=System.IO名前空間のStreamクラスのオブジェクト)を取得し、そのストリームからファイルのデータを読み込むコードが必要だ。

SaveFileDialogコントロール

 SaveFileDialogコントロール(以下、SaveFileDialog)は、ガイドラインには「コモン・ダイアログ・ボックス」の「ファイルを保存する」として規定されていて、利用者にファイルを選択させるためのダイアログ(図11参照)を表示する。SaveFileDialogを表示するためのコマンド名としては[名前を付けて保存(A)...]が推奨されている。

■図11 SaveFileDialogの表示例

 下記のコードは、ボタンがクリックされたときにSaveFileDialogを表示して、そこで利用者が指定したファイル名をテキスト・ボックスに設定するサンプル・コード。

Private Sub Save_Button_Click(ByVal sender As System.Object,
                              ByVal e As System.EventArgs) _
                          Handles Save_Button.Click

  If Me.Save_TextBox.Text.Length = 0 Then
    Me.SaveFileDialog1.InitialDirectory =
      Environment.GetFolderPath( _
        Environment.SpecialFolder.MyPictures)
  Else
    Me.SaveFileDialog1.FileName =
      System.IO.Path.GetFileName(Me.Save_TextBox.Text)
    Me.SaveFileDialog1.InitialDirectory =
      System.IO.Path.GetDirectoryName(Me.Save_TextBox.Text)
  End If
  Me.SaveFileDialog1.DefaultExt = "jpg"
  Me.SaveFileDialog1.Filter = "JPEG(*.jpg)|*.jpg|すべて (*.*)|*.*"
  Me.SaveFileDialog1.FilterIndex = 1
  Me.SaveFileDialog1.RestoreDirectory = True
  Me.SaveFileDialog1.Title = "ファイルの保存"
  Me.SaveFileDialog1.OverwritePrompt = True
  If Me.SaveFileDialog1.ShowDialog = DialogResult.OK Then
    Me.Save_TextBox.Text = Me.SaveFileDialog1.FileName
  End If
End Sub
private void Save_Button_Click(object sender, EventArgs e)
{
  if (this.Save_TextBox.Text.Length == 0)
  {
    this.SaveFileDialog1.InitialDirectory =
      Environment.GetFolderPath(
        Environment.SpecialFolder.MyPictures);
  }
  else
  {
    this.SaveFileDialog1.FileName =
      System.IO.Path.GetFileName(this.Save_TextBox.Text);
    this.SaveFileDialog1.InitialDirectory =
      System.IO.Path.GetDirectoryName(this.Save_TextBox.Text);
  }
  this.SaveFileDialog1.DefaultExt = @"jpg";
  this.SaveFileDialog1.Filter =
    @"JPEG(*.jpg)|*.jpg|すべて(*.*)|*.*";
  this.SaveFileDialog1.FilterIndex = 1;
  this.SaveFileDialog1.RestoreDirectory = true;
  this.SaveFileDialog1.Title = @"ファイルの保存";
  this.SaveFileDialog1.OverwritePrompt = true;
  if (this.SaveFileDialog1.ShowDialog() == DialogResult.OK)
  {
    this.Save_TextBox.Text = this.SaveFileDialog1.FileName;
  }
}
リスト5 SaveFileDialog の使用例(上:VB、下:C#)

 リスト5でもリスト4と同様に、初回と2回目以降でダイアログを開いたときのフォルダを変更している。このように2回目以降で前回保存したファイルのフォルダを初期表示しておけば、上書き保存をデフォルトの操作としたうえで別ファイル名保存の指定も簡単に行えるUIが実現できる。

 なお、SaveFileDialogはあくまでもファイルを指定するダイアログなので、リスト5のコードだけではデータをファイルに保存することはできない。従って、ShowDialogメソッドの結果が「DialogResult.OK」だった場合には、SaveFileDialogのOpenFileメソッドを実行して保存用のストリームを取得し、そのストリームを利用してファイルへデータを書き出すコードが必要だ。


 INDEX
  [連載]Windowsフォーム開発入門【Visual Studio 2010対応】
  Windowsフォーム・コントロールの基礎(その2)
    1.メニューとツールバー
  2.ダイアログ
    3.コンテナ

インデックス・ページヘ  「Windowsフォーム開発入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH