OpeFileDialog に独自のコントロールを配置してカスタマイズする (Windows API Code Pack を利用)

OpeFileDialog に独自のコントロールを配置してカスタマイズする方法を紹介します。

概要

OpenFileDialogに独自のコントロールなどを配置したい場合は、Windows API Code Packの CommonOpenFileDialog を利用すると簡単に実現できます。

プログラム

UI

下図のUIを作成します。フォームにButtonを1つ、Labelを2つ配置します。

コード

下記コードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.WindowsAPICodePack;
using Microsoft.WindowsAPICodePack.Dialogs;
using Microsoft.WindowsAPICodePack.Dialogs.Controls;


namespace CustomFileOpenDialog
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      CommonOpenFileDialog dialog = new CommonOpenFileDialog();
      CommonFileDialogComboBox comboBox = new CommonFileDialogComboBox();
      comboBox.Items.Add(new CommonFileDialogComboBoxItem("ペンギン"));
      comboBox.Items.Add(new CommonFileDialogComboBoxItem("くじら"));
      comboBox.Items.Add(new CommonFileDialogComboBoxItem("ハシビロコウ"));
      comboBox.SelectedIndex=0;
      dialog.Controls.Add(comboBox);

      if (dialog.ShowDialog() == CommonFileDialogResult.Ok) {
        label1.Text = dialog.FileName;
        label2.Text = comboBox.Items[comboBox.SelectedIndex].Text;
      }

    }
  }
}

解説

下記コードでCommonOpenFileDialog のオブジェクトと、ダイアログ内に追加するコンボボックスであるCommonFileDialogComboBox オブジェクトを作成しています。
  CommonOpenFileDialog dialog = new CommonOpenFileDialog();
  CommonFileDialogComboBox comboBox = new CommonFileDialogComboBox();

下記コードで、コンボボックスにアイテムを追加しています。またデフォルトで選択される要素のインデックスをSelectedIndexプロパティに設定しています。
  comboBox.Items.Add(new CommonFileDialogComboBoxItem("ペンギン"));
  comboBox.Items.Add(new CommonFileDialogComboBoxItem("くじら"));
  comboBox.Items.Add(new CommonFileDialogComboBoxItem("ハシビロコウ"));
  comboBox.SelectedIndex=0;

CommonOpenFileDialog のインスタンスのオブジェクトにコンボボックスを追加しています。
  dialog.Controls.Add(comboBox);

下記コードは通常のFileOpenDialogと同様のコードです。ShowDialog()メソッドでダイアログボックスを表示し、ダイアログでファイルが開けれた場合は、フォームのlabel1, label2にファイル名と、コンボボックスで選択された要素のテキストを表示します。
  if (dialog.ShowDialog() == CommonFileDialogResult.Ok) {
    label1.Text = dialog.FileName;
    label2.Text = comboBox.Items[comboBox.SelectedIndex].Text;
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


ウィンドウの[button1]をクリックします。下図のファイルを開くダイアログボックスが表示されます。[開く]ボタンの左隣にコンボボックスが表示されていることが確認できます。


コンボボックスを開くと、コードに記述した"ペンギン","くじら","ハシビロコウ"の項目が追加されていることが確認できます。


コンボボックスで要素を選択し、ファイルを選択して開きます。


フォームに選択したファイルのファイルパスと、ダイアログのコンボボックスで選択した要素が表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2015-02-24
iPentec all rights reserverd.