イベントを追加する
MenuStripコントロールを追加する
コントロールの配置が終わったら、次はこのフォームにrpxファイルのオープンや保存、デザイナに配置したコントロールを編集するためのイベント処理を実装していきます。今回はイベントを起動するためのコントロールとして、フォームにMenuStripコントロールを追加します。ランタイムデザイナのフォームにMenuStripコントロールをドロップし、トップレベルのメニュー項目として「File」と「Edit」を追加し、「File」メニューのサブメニューには「Open」「Save As」を、「Edit」メニューのサブメニューには「Undo」「Redo」「Cut」「Copy」「Paste」をそれぞれ追加します。
MenuStripにメニューアイテムを追加して表示名(キャプション)を設定すると、その名前がコントロール名の一部に使われてしまいます。そこで、表示名を最初は英語で入力しておき、後からTextプロパティを日本語に変更する方法がおすすめです。また、ここで表示名に「&[アクセスキーのアルファベット]」のような書式の文字を入れると、アクセスキーを設定できます。この他、好みに合わせてShortCutKeysプロパティを設定することも可能です。
イベントを設定する
MenuStripコントロールを構成したら、次は各メニュー項目にイベントを設定していきます。ここでは、「ファイル」メニューの「開く」に「rpxファイルを開いてDesignerコントロールへ展開する」という処理を実装します。イベント処理を記述する前に、ソースファイルの先頭に以下のusingディレクティブ(Importsステートメント)を追加しておきましょう。
using DataDynamics.ActiveReports; using DataDynamics.ActiveReports.Design; using DataDynamics.ActiveReports.Design.Toolbox;
Imports DataDynamics.ActiveReports Imports DataDynamics.ActiveReports.Design Imports DataDynamics.ActiveReports.Design.Toolbox
ランタイムデザイナで編集しているレポートファイルに対する操作は、DesignerコントロールのExecuteActionメソッドを実行することで実現します。ExecuteActionメソッドでは、DesignerAction列挙体でアクションの種類を指定します。ここでは、「ファイル」メニューの「開く」というメニュー項目をダブルクリックして、Clickイベントを実装します。
private void openToolStripMenuItem_Click(object sender, EventArgs e) { this.designer1.ExecuteAction(DesignerAction.FileOpen); }
Private Sub OpenToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles OpenToolStripMenuItem.Click Me.Designer1.ExecuteAction(DesignerAction.FileOpen) End Sub
同じ要領で、メニューに追加したほかの項目にもイベントを実装していきます。なお、切り取りやコピーなどのように選択中のオブジェクトを操作するタイプのイベントでは、PropertyGridコントロールのSelectedObjectプロパティで対象のオブジェクトが指定されていることを確認しています。
//名前をつけて保存 private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { this.designer1.ExecuteAction(DesignerAction.FileSave); } //元に戻す private void undoToolStripMenuItem_Click(object sender, EventArgs e) { this.designer1.ExecuteAction(DesignerAction.EditUndo); } //やり直し private void redoToolStripMenuItem_Click(object sender, EventArgs e) { this.designer1.ExecuteAction(DesignerAction.EditRedo); } //切り取り private void cutToolStripMenuItem_Click(object sender, EventArgs e) { if (propertyGrid1.SelectedObject != null) { this.designer1.ExecuteAction(DesignerAction.EditCut); } } //コピー private void copyToolStripMenuItem_Click(object sender, EventArgs e) { if (propertyGrid1.SelectedObject != null) { this.designer1.ExecuteAction(DesignerAction.EditCopy); } } //貼り付け private void pasteToolStripMenuItem_Click(object sender, EventArgs e) { this.designer1.ExecuteAction(DesignerAction.EditPaste); }
'名前をつけて保存 Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles OpenToolStripMenuItem.Click Me.Designer1.ExecuteAction(DesignerAction.FileSave) End Sub '元に戻す Private Sub UndoToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles UndoToolStripMenuItem.Click Me.Designer1.ExecuteAction(DesignerAction.EditUndo) End Sub 'やり直し Private Sub RedoToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles RedoToolStripMenuItem.Click Me.Designer1.ExecuteAction(DesignerAction.EditRedo) End Sub '切り取り Private Sub CutToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles CutToolStripMenuItem.Click If Me.PropertyGrid1.SelectedObject Is Nothing Then Me.Designer1.ExecuteAction(DesignerAction.EditCut) End If End Sub 'コピー Private Sub CopyToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles CopyToolStripMenuItem.Click If Me.PropertyGrid1.SelectedObject Is Nothing Then Me.Designer1.ExecuteAction(DesignerAction.EditCopy) End If End Sub '貼り付け Private Sub PasteToolStripMenuItem_Click(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles PasteToolStripMenuItem.Click Me.Designer1.ExecuteAction(DesignerAction.EditPaste) End Sub