SHOEISHA iD

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

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

ComponentZine(ComponentOne)

.NETアプリのリボンインターフェースにUndo・Redo・ズーム機能を組み込む

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

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

Office 2007の各アプリケーションにある「リボン」には、クイックアクセスツールバーが組み込まれています。また、ウィンドウ下部には画面をズーム表示するトラックバーやコンボボックスが装備されています。そこで、今回はこれらの機能を前回作成したアプリケーションに追加してみました。

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

はじめに

 Office 2007の各アプリケーションにある「リボン」には、クイックアクセスツールバーが組み込まれています。また、ウィンドウ下部には画面をズーム表示するトラックバーやコンボボックスが装備されています。

 そこで、今回はこれらの機能を、前回作成したリボンを組み込んだエディタアプリケーションに追加してみました。

Undo・Redoボタンをクイックアクセスツールバーに組み込む
Undo・Redoボタンをクイックアクセスツールバーに組み込む
トラックバーとコンボボックスのリストを使ってズーム表示する
 トラックバーとコンボボックスのリストを使ってズーム表示する

対象読者

 Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある人。

前回の記事

必要な環境

 Visual Basic 2005またはVisual C# 2005、Visual Studio 2005でプログラムが作れる環境。

 なお、本プログラムはWindows Vista上で動作するVisual Studioを使用して作成し動作確認を行っています。

プログラム実行時の注意事項

  本稿の実行ファイル(バイナリファイル)を動かすには、zipファイルに同梱してある以下の2つのファイルが必要になります。

  • C1.Win.C1Ribbon.2.dll…C1Ribbon コンポーネント(.NET Framework 2.0 用)

 これらのファイルを、実行プログラムと同じフォルダに格納します。 .NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。

 Windows VistaでPowerTools Ribbon for .NETのサンプルをコンパイルしようとするとエラーが発生します。これは、Windows VistaのUAC(ユーザーアカウント制御)により、製品サンプルがインストールされているフォルダに書き込みができないため、コンパイル時にエラーが発生するという現象です。Visual Studioを管理者として実行するか、サンプルプロジェクト一式をアクセス権のあるフォルダに移動してからコンパイルを行うようにしてください。

コンポーネントのインストール

 はじめてPowerTools Ribbon for .NETを使用する方は、プロジェクトにComponentOne Studio 2007 WinForms Editionをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページ左側の[ダウンロード]-[トライアル版]をクリックし、ダウンロード方法([FTP]または[HTTP])を選択すれば入手できます。ファイルはLZH形式で圧縮されています。

 有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 PowerTools Ribbon for .NETをインストールしたら、ツールボックスに専用のタブを作成し、PowerTools Ribbon for .NETコンポーネントを追加します。追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「C1.Win.C1Ribbon」で始まる名前空間のコンポーネント「C1Ribbon」と「C1StatusBar」です。

「名前空間」が「C1.Win.C1Ribbon」で始まる名前空間のコンポーネント「C1Ribbon」と「C1StatusBar」を選択する
 「名前空間」が「C1.Win.C1Ribbon」で始まる名前空間のコンポーネント「C1Ribbon」と「C1StatusBar」を選択する

クイックアクセスツールバーを組み込む

 クイックアクセスツールバーとは、リボンのアプリケーションメニューの横に組み込まれる小さなボタンのことをいいます。ここにボタンを設定しておくと、リボンがどのタブになっていても、いつでもこのボタンに組み込んだ機能を呼び出して使用することができます。

 このツールバーにボタンを組み込むには、一度リボンのタブにボタンを組み込み、これをクイックアクセスツールバーにも組み込む、という方法をとります。ここでは、RichTextBoxコントロールが持っているUndo・Redo機能をボタンから実行できるようにします。

ボタンの追加

 まず、前回の記事『.NETでOffice 2007と同じ「リボンインターフェース」を持ったエディタを作る』で紹介した方法で、リボンの「編集」タブに2つのボタンを組み込みます。

グループをクリックしボタンを追加する
グループをクリックしボタンを追加する

 ボタンの画像は、C1Ribbonコンポーネントが持っているリストから選び、テキストを「Undo」「Redo」に変えます。なお、画像は大小ともに同じものを設定してください。クイックアクセスツールバーには、小さいほうの画像が使用されます。

 また、2つのボタンのNameプロパティを「ribbonButtonUndo」「ribbonButtonRedo」に変更します。

大画像・小画像それぞれリストから選んで設定する
大画像・小画像それぞれリストから選んで設定する

 そして、組み込んだボタンをクリックし、「+QAT」というボタンを押します。これで、このボタンがクイックアクセスツールバーに配置されます(逆に、クイックアクセスツールバーから外したい場合は、「-QAT」ボタンを押します)。

「+QAT」ボタンを押す
「+QAT」ボタンを押す

 リボンに配置した「Undo」「Redo」ボタンのClickイベントハンドラに、RichTextBoxコントロールのUndo・Redoメソッドを実行するコードを作成して出来上がりです。

Visual Basic
Private Sub RibbonButtonUndo_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles RibbonButtonUndo.Click
    Me.RichTextBox1.Undo()
End Sub

Private Sub RibbonButtonRedo_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles RibbonButtonRedo.Click
    Me.RichTextBox1.Redo()
End Sub
C#
private void ribbonButtonUndo_Click(object sender, EventArgs e)
{
    this.richTextBox1.Undo();
}

private void ribbonButtonRedo_Click(object sender, EventArgs e)
{
    this.richTextBox1.Redo();
}

ステータスバーにコンボボックスとトラックバーを組み込む

 次に、ステータスバーにズーム機能を組み込むためのコンボボックスとトラックバーを組み込みます。ステータスバーは、C1Ribbonコンポーネントの下層に位置するC1StatusBarクラスを使ってデザインや処理を実装します。

 C1StatusBarオブジェクトは、「LeftPain」と「RightPain」という2つのペインに分かれており、それぞれ下表にあるコントロールを組み込んで使うことができます。

  • ボタン
  • ラベル
  • メニュー
  • 区切り記号
  • トグルグループ
  • トグルボタン
  • プログレスバー
  • チェックボックス
  • トラックバー
  • コンボボックス

 今回は、右側のペインに、コンボボックスとトラックバーを組み込み、RichTextBoxコントロールのズーム機能を使えるようにします。

右側のペインにコンボボックスとトラックバーを組み込む
右側のペインにコンボボックスとトラックバーを組み込む

トラックバーとコンボボックスを組み込む

 ステータスバーにコントロールを組み込むには、フォームデザイン時は専用のエディタを使用します。

1.

 フォームのステータスバーの部分をクリックし、プロパティウィンドウのオブジェクト名が「c1StatusBar1」になっているのを確認し、「RightPainItems」プロパティをクリックします。

2.

 「c1StatusBar右ぺインアイテムコレクションエディタ」が表示されるので、「追加」ボタンの横の▼をクリックしてリストから「RibbonCombobox」を選びます。そして、次のプロパティを設定します。

プロパティ 設定値
Label Zoom
Text 100
TextAreaWidth 30
リストから「RibbonTrackBar」を選ぶ
リストから「RibbonTrackBar」を選ぶ
3.

 同じように、「追加」ボタンの横の▼をクリックしてリストから「RibbonTrackBar」を選びます。

 そして、コレクションエディタのプロパティリストにある次のプロパティを設定します。これらは、TrackBarの動作範囲を設定するプロパティです。

プロパティ 設定値
LargeChange 10
Maximum 500
Minimum 10
SmallChange 5
Value 100
動作範囲のプロパティを設定する
動作範囲のプロパティを設定する
4.

 コレクションエディタを閉じ、プロパティウィンドウの「RightPaneWidth」を200にします。これで、ステータスバーにコンボボックスとトラックバーが表示されます。

コンボボックスのリストとズーム機能の処理の作成

 コンボボックスとトラックバーにズーム機能を実装します。

1.

 フォームのLoadイベントハンドラで、コンボボックスのリストを追加する処理を作成します。リストは、最小値を10にし、後は50から50ずつ増えるようにします。

Visual Basic
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
End Sub
C#
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);
}
2.

 次に、RibbonTrackBarがクリックされた時の処理を作成します。これは、C1StatusBarオブジェクトのClickイベントハンドラを使用します。

 まず、RibbonTrackBarのValueプロパティから現在の設定値を取り出し、倍率(%)に換算して変数に格納します。

 そして、この値をRichTextBoxのZoomFactorプロパティに設定します。このZoomFactorプロパティは、RichTextBoxの画面の表示倍率を設定するプロパティで、1/64から64.0までの範囲の値をSingle型で設定すると、画面の表示をその倍率で行います。

 また、RibbonTrackBarのValueプロパティの値を文字列に変換し、RibbonComboBoxのTextプロパティに代入しておきます。

Visual Basic
Private Sub C1StatusBar1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles C1StatusBar1.Click
    Dim zoomsize As Single = Me.RibbonTrackBar1.Value / 100

    Me.RichTextBox1.ZoomFactor = zoomsize

    Me.RibbonComboBox1.Text = Me.RibbonTrackBar1.Value.ToString
End Sub
C#
private void c1StatusBar1_Click(object sender, EventArgs e)
{
    Single zoomsize = System.Convert.ToSingle(ribbonTrackBar1.Value)/100;

    richTextBox1.ZoomFactor = zoomsize;
    ribbonComboBox1.Text
      = System.Convert.ToString(ribbonTrackBar1.Value);
}
3.

 今度は、RibbonComboBoxのリストが選択された場合の処理です。これは、RibbonComboBoxのSelectedIndexChangedイベントハンドラで処理します。

 といっても、選択されたリスト項目からズーム倍率を算出し、RichTextBoxのZoomFactorプロパティに設定するだけです。

 設定したら、その値をRibbonTrackBarのValueプロパティに設定して、連動させておきます。

Visual Basic
Private Sub RibbonComboBox1_SelectedIndexChanged(_
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles RibbonComboBox1.Selecte Dim zoomsize As Single = _
      CInt(Me.RibbonComboBox1.SelectedItem.Text)
    Me.RichTextBox1.ZoomFactor = zoomsize / 100
    Me.RibbonTrackBar1.Value = zoomsize
End Sub
C#
private void ribbonComboBox1_SelectedIndexChanged(object sender, 
                                                  EventArgs e)
{
    Single zoomsize
      = System.Convert.ToSingle(ribbonComboBox1.SelectedItem.Text);
    richTextBox1.ZoomFactor = zoomsize / 100;
    ribbonTrackBar1.Value = System.Convert.ToInt32(zoomsize);
}

まとめ

 MicrosoftがOffice 2007で導入した新しいGUIのリボンは、Windows VistaのGUIと合わせてこれまでにない外観をプログラムに実装できます。

 この新しいGUIをプログラムに実装したいと思っている方は、ぜひPowerTools Ribbon for .NETのC1Ribbonコンポーネントを使ってみてください。

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2153 2008/08/20 14:06

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング