ランタイムデザイナの機能を制限する
Designerコントロールを使うと、フォームにコントロールを貼り付けてメニューにイベントを追加していくだけでも、かなり多機能なランタイムデザイナを作成することができます。反面、このような自由度の高い帳票編集アプリケーションは、エンドユーザーの操作ミスによってレポートファイルを破損してしまう可能性もあり、業務の現場で利用するには強力すぎるかもしれません。ここからは、開発したランタイムデザイナをユーザーの利用環境に合わせて機能を制限していく方法について解説します。
Designerコントロールの機能を制限する
ランタイムデザイナの中心部とも言えるDesignerコントロールの機能を制限するには、コントロールの各種プロパティを設定するのが簡単です。例えば、デザイナ下部に表示されているタブを非表示にするには、ReportTabsVisibleプロパティをFalseに設定します。「スクリプト」タブや「プレビュー」タブなど、個々のタブを非表示にする場合は、EnableScriptingプロパティ、EnablePreviewタブをそれぞれFalseに設定します。
また、Detailセクションのバーに表示されているアイコンをクリックすると、レポートデータソースの接続先情報を編集できますが、ここで定義されているデータベース接続文字列やSQLを誤って変更されると、レポートファイルが起動しなくなってしまいます。接続情報の変更を防ぐためには、このデータソースアイコンを非表示にします。
データソースアイコンを非表示にするには、ShowDataSourceIconプロパティをFalseにします。データソースだけでなく帳票レイアウトそのものをレポートそのものを編集できないようにするには、LockControlsプロパティをTrueにします。
private void Form1_Load(object sender, EventArgs e) { this.designer1.Toolbox = this.toolbox1; this.toolbox1.Dock = DockStyle.Fill; //「スクリプト」タブを非表示にする this.designer1.EnableScripting = false; //「プレビュー」タブを非表示にする this.designer1.EnablePreview = false; //データソースアイコンを非表示にする this.designer1.ShowDataSourceIcon = false; //コントロールをロック(編集不可)にする this.designer1.LockControls = true; }
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load Me.Designer1.Toolbox = Me.Toolbox1 Me.Toolbox1.Dock = DockStyle.Fill '「スクリプト」タブを非表示にする Me.Designer1.EnableScripting = False '「プレビュー」タブを非表示にする Me.Designer1.EnablePreview = False 'データソースアイコンを非表示にする Me.Designer1.ShowDataSourceIcon = False 'コントロールをロック(編集不可)にする Me.Designer1.LockControls = True End Sub
右クリックメニューを抑制する
Designerコントロールを右クリックして表示されるコンテキストメニューには、グループヘッダやグループフッタを追加する機能が含まれています。レポートファイルにグループが追加されるとレポートのデータ構造や集計単位が大きく変わってしまうため、ここもデータソース同様、設定の難しい箇所と言えます。コンテキストメニューの起動を抑制するには、DesignerコントロールのContextMenuOpenイベントに、「キャンセルする」という処理を追加します。このイベント処理では、ContextMenuOpenArgsオブジェクトのMenuTypeが「Section」であったときにCancelプロパティをtrueに設定することでメニューの起動を中止しています。
private void ar3designer_ContextMenuOpen(object sender, _ ContextMenuOpenArgs e) { if(e.MenuType == ContextMenuTypes.Section) { e.Cancel = true; } }
Private Sub Designer1_ContextMenuOpen(ByVal sender As Object, _ ByVal e As ContextMenuOpenArgs) _ Handles Designer1.ContextMenuOpen If e.MenuType = ContextMenuTypes.Section Then e.Cancel = True End If End Sub
ランタイムデザイナのカスタマイズ方法については、ここで紹介したものの他にも、グレープシティ社のFAQ(よくある質問)ページでも技術情報が公開されています。
- 【ランタイムデザイナ】ツールボックスからレポートアイテムを削除したい、レポートアイテムの名前を変更したい
- 【ランタイムデザイナ】プロパティグリッドに表示されるプロパティを制限したい
- 【ランタイムデザイナ】カスタマイズされたレポートアイテムをレポートに追加したい
おわりに
今回はActiveReportsのレポートファイルを編集するランタイムデザイナアプリケーション作成の手順について解説しました。
次回はLinqなどVisual Studio 2008に対応したActiveReportsの新機能について紹介する予定です。