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オブジェクトを作成して指定します。
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
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プロパティの値を更新するようにします。
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
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プロパティの値を使用しますので、ここにファイル名をフルパスで格納しておきます。
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
listItem = new RibbonListItem(); listItem.Items.Add(new RibbonLabel(fname)); listItem.ID = fname; c1Ribbon1.ApplicationMenu.RightPaneItems.Add(listItem); listItem.Click += new EventHandler(addmenu_Click); }
作成したaddmenu
プロシージャ(メソッド)は、アプリケーションメニューの「ファイルを開く」メニューでファイルを開いたあとに呼び出します。
これで、ファイルを開くたびに、ファイル名がフルパスでメニューに組み込まれます。
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
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); //この行を追加 } } }