SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

リボンインターフェースに「開いたファイルの履歴」を組み込む

PowerTools Ribbon for .NETのC1Ribbonコンポーネントを使ってアプリケーションにリボンを実装する-その3

  • このエントリーをはてなブックマークに追加

C1Ribbonコンポーネントのオブジェクト構造

 コードからC1Ribbonコンポーネントを操作するにあたり、アプリケーションメニューの右ペインに組み込むメニュー項目が、どのようなオブジェクト構成になっているのかを把握しておく必要があります。

 アプリケーションメニュー全体は「RibbonApplicationMenu」クラスです。また、アプリケーションメニューの各ペインにあるメニューは「RibbonItems」「RibbonItemCollection」クラスになります。このペインの中には、ラベルやリスト、ボタンなどのメニューオブジェクトを組み込むことができます。そして、このオブジェクトへの参照を取得するには、例えば右ペインであれば「RightPaneItem」プロパティを使用します。

 ペイン内のリスト状のメニューは「RibbonListItem」クラスになります。そして、リストの各項目名は「RibbonLabel」クラスになります。

 これらをGUI上で確認すると以下のようになります。

アプリケーションメニューのオブジェクト構成
アプリケーションメニューのオブジェクト構成

アプリケーションメニューの実装

 では、アプリケーションメニューの上の階層のオブジェクトから順番に組み込んでいきましょう。最初は、右ペインに「最近使用したドキュメント」と区切り線を作成して組み込みます。

右ペインに見出し文字を組み込む

 プログラム起動時に、アプリケーションメニューの右ペインに「最近使用したドキュメント」という見出し文字と区切り線を組み込みます。処理としては、

  • RibbonListItemオブジェクトを作成
  • ApplicationMenuオブジェクトのRightPaneItemsプロパティを使用して右ペインのRibbonItemsオブジェクトを参照
  • RibbonItemsオブジェクトにRibbonListItemオブジェクトを組み込む

 という流れになります。

右ペインに「最近使用したドキュメント」という見出し文字と区切り線を組み込む
右ペインに「最近使用したドキュメント」という見出し文字と区切り線を組み込む

 まず、RibbonListItemオブジェクトへの参照を格納する変数をPublicアクセッサで宣言します。

 そして、フォームの初期化イベントハンドラでRibbonListItemオブジェクトを作成します。コンストラクタの引数にはRibbonLabelクラスのコンストラクタを指定し、「最近使用したドキュメント」という文字を設定したRibbonLabelオブジェクトを作成しこれを指定します。

 作成したら、AddメソッドでRibbonItemsオブジェクトにこのRibbonListItemオブジェクトを追加します。

 区切り線も同じ方法でRibbonListItemオブジェクトを作成しますが、コンストラクタの引数にはRibbonSeparatorオブジェクトを作成して指定します。

Visual Basic
Imports C1.Win.C1Ribbon

Public Class RibbonForm1
    Public fsize As Integer = 10

    'この変数を追加
    Public listItem As RibbonListItem

'このプロシージャをVersion3で修正
Private Sub RibbonForm1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    Dim i As Integer

    Me.RibbonComboBox1.Items.Add(10)
    For i = 50 To 500 Step 50
        Me.RibbonComboBox1.Items.Add(i)
    Next

    Me.RibbonComboBox1.Text = Me.RibbonTrackBar1.Value.ToString

    'この行以下をVersion3で追加
    Dim listItem As RibbonListItem = New RibbonListItem(_
        New RibbonLabel("最近使用したドキュメント"))
    listItem.AllowSelection = False
    C1Ribbon1.ApplicationMenu.RightPaneItems.Add(listItem)
    C1Ribbon1.ApplicationMenu.RightPaneItems.Add(New RibbonListItem(_
                                               New RibbonSeparator()))
End Sub
C#
using C1.Win.C1Ribbon;

public partial class RibbonForm1 : C1.Win.C1Ribbon.C1RibbonForm
{
    public int fsize=10;

    //この変数を追加
    public RibbonListItem listItem; 

    private void RibbonForm1_Load(object sender, EventArgs e)
    {
        int i;
        ribbonComboBox1.Items.Add("10");
        for (i = 50; i <= 500; i += 50)
        {
            ribbonComboBox1.Items.Add(System.Convert.ToString(i));
        }

        ribbonComboBox1.Text
          = System.Convert.ToString(ribbonTrackBar1.Value);

        //この行以下をVersion3で追加
        RibbonListItem listItem
          = new RibbonListItem(
                new RibbonLabel("最近使用したドキュメント"));
        listItem.AllowSelection = false;
        c1Ribbon1.ApplicationMenu.RightPaneItems.Add(listItem);
        c1Ribbon1.ApplicationMenu.RightPaneItems.Add(
                       new RibbonListItem(new RibbonSeparator()));
    }

 このように、右ペインにいろいろなメニューコントロールを組み込むことができます。このプログラムでは、リスト形式のRibbonListItemオブジェクトを組み込みましたが、他に次のようなオブジェクトを組み込んで使うことができます。

コントロールオブジェクト(クラス)名
ボタンC1.Win.C1Ribbon.RibbonButton
カラーピッカーC1.Win.C1Ribbon.RibbonColorPickerItem
ドロップダウンC1.Win.C1Ribbon.RibbonDropDownBase
エディットボックスC1.Win.C1Ribbon.RibbonEditBox
ギャラリーC1.Win.C1Ribbon.RibbonGalleryItem
アイテムコンテナC1.Win.C1Ribbon.RibbonItemContainer
ラベルC1.Win.C1Ribbon.RibbonLabel
リストC1.Win.C1Ribbon.RibbonListItem
プログレスバーC1.Win.C1Ribbon.RibbonProgressBar
グループボタンC1.Win.C1Ribbon.RibbonQatGroupButton
区切り線C1.Win.C1Ribbon.RibbonSeparator
トラックバーC1.Win.C1Ribbon.RibbonTrackBar

 また、RibbonDropDownBaseオブジェクトを使うと、この中にさらにメニューやスプリットボタン、コンボボックスなどを組み込むことができます。

開いたファイルの名前をメニューに組み込む

 右ペインにメニューを組み込む方法が分かれば、後はRibbonListItemオブジェクトに、次々と開いたファイル名を組み込んでいくだけになります。

 この処理は、VBでは独自のSubプロシージャ、C#では独自のメソッドaddmenuを作成して呼び出すようにします。引数にはファイル名のフルパス名を指定します。

 最初に、ファイル名の文字数によってアプリケーションメニューの幅を広げるようにします。これは、フルパス名の文字数をカウントし、12倍してRibbonApplicationMenuオブジェクトのDropDownWidthプロパティに設定します。

 ただし、すでにアプリケーションメニューで表示しているパス名よりもファイル名が短い場合は、そのままDropDownWidthプロパティに設定してしまうと、アプリケーションメニューの幅が小さくなってしまい、長いパス名が表示できなくなってしまいます。そこで、ファイル名が現在表示しているパス名よりも長い場合だけ、DropDownWidthプロパティの値を更新するようにします。

Visual Basic
Private Sub addmenu(ByVal fname As String)
        Dim cnt As Integer = fname.Length
        If Me.RibbonApplicationMenu1.DropDownWidth < cnt * 12 Then
            Me.RibbonApplicationMenu1.DropDownWidth = cnt * 12
        End If
C#
 private void addmenu(String fname)
        {
            int cnt = fname.Length;
            if(ribbonApplicationMenu1.DropDownWidth < cnt * 12)
            {
                ribbonApplicationMenu1.DropDownWidth = cnt * 12;
            }

 次にRibbonListItemオブジェクトを作成し、RibbonLabelオブジェクトをファイル名を引数に指定して組み込み、これを右ペインに組み込みます。

 そして、このアイテムが選択された時に実行するイベントハンドラを関連付けておきます。VBではAddHandlerステートメント、C#ではEventHandlerクラスのコンストラクタを使用します。イベントハンドラ名は「addmenu_Click」とします。なお、イベントハンドラへの関連付けはRibbonListItemオブジェクトを1つ作成するたびに行いますが、イベントハンドラそのものは1つで、これを共有する形にします。

 ここでポイントとなるのは、RibbonListItemオブジェクトのIDプロパティにもファイル名をフルパスで格納している点です。IDプロパティは、RibbonListItemオブジェクトを識別するために使用する、データ型が文字列のプロパティです。あとで、このメニューが選択された時にファイルを開くためにファイル名を使用する際に、このIDプロパティの値を使用しますので、ここにファイル名をフルパスで格納しておきます。

Visual Basic
    listItem = New RibbonListItem()
    listItem.Items.Add(New RibbonLabel(fname))
    listItem.ID = fname
    C1Ribbon1.ApplicationMenu.RightPaneItems.Add(listItem)
    AddHandler listItem.Click, AddressOf addmenu_Click
End Sub
C#
    listItem = new RibbonListItem();
    listItem.Items.Add(new RibbonLabel(fname));
    listItem.ID = fname;
    c1Ribbon1.ApplicationMenu.RightPaneItems.Add(listItem);
    listItem.Click += new EventHandler(addmenu_Click);
}

 作成したaddmenuプロシージャ(メソッド)は、アプリケーションメニューの「ファイルを開く」メニューでファイルを開いたあとに呼び出します。

 これで、ファイルを開くたびに、ファイル名がフルパスでメニューに組み込まれます。

Visual Basic
Private Sub RibbonButton1_Click(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles RibbonButton1.Click
    Dim fname As String = ""
    Dim ret As Integer

    Me.OpenFileDialog1.FileName = "*.txt"
    ret = Me.OpenFileDialog1.ShowDialog
    If DialogResult.OK Then
        fname = Me.OpenFileDialog1.FileName
        If fname <> "" Then
            Me.RichTextBox1.LoadFile(fname, _
                                     RichTextBoxStreamType.PlainText)

            Call addmenu(fname)  'この行をVersion3で追加
        End If
    End If
End Sub
C#
private void ribbonButton1_Click(object sender, EventArgs e)
{
    String fname;
    DialogResult ret;

    openFileDialog1.FileName = "*.txt";
    ret = openFileDialog1.ShowDialog();
    if(ret == DialogResult.OK){
        fname = openFileDialog1.FileName;
        if(fname != ""){
            richTextBox1.LoadFile(fname, _
                                  RichTextBoxStreamType.PlainText);
            addmenu(fname);  //この行を追加
        }
    }
}

次のページ
選択したファイルを開く処理-イベント処理

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2249 2008/06/24 15:06

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング