VB のたまご

作成日: 2018/11/07, 更新日: 2018/11/07


デザイン時サービス(3)


IComponentChangeService

  •  ここではソースコード生成について説明します。多分本来は、画面デザインの保存として、シリアライズを使い、このタイミングでどうにかしてソースコード生成を行うのだと思うのですが、よく分かっていません。 そのため、何かの作業をするたびにイベントを発行してくれる IComponentChangeService サービスを利用して、都度ソースコード生成をおこなうケーススタディとして紹介します。

  •  前回出てきた ISelectionService と同じやり方で使います。
  • ' IComponentChangeService
    ' 配置コントロールの編集系イベント管理の役割
    ' 任意の動作に応じて、都度ソースコード生成をおこないます。
    Dim componentChangeService = CType(serviceContainer.GetService(GetType(IComponentChangeService)), IComponentChangeService)
    AddHandler componentChangeService.ComponentAdded, AddressOf Me.ComponentChangeService_ComponentAdded
    AddHandler componentChangeService.ComponentChanged, AddressOf Me.ComponentChangeService_ComponentChanged
    AddHandler componentChangeService.ComponentRemoved, AddressOf Me.ComponentChangeService_ComponentRemoved
    AddHandler componentChangeService.ComponentRename, AddressOf Me.ComponentChangeService_ComponentRename
    
    
    
    ' 配置コントロールが追加された時
    Private Sub ComponentChangeService_ComponentAdded(sender As Object, e As ComponentEventArgs)
        MakeSource()
    End Sub
    
    ' 配置コントロールが変更された時
    Private Sub ComponentChangeService_ComponentChanged(sender As Object, e As ComponentChangedEventArgs)
    
        SelectionService_SelectionChanged(sender, EventArgs.Empty)
        MakeSource()
    
    End Sub
    
    ' 配置コントロールが削除された時
    Private Sub ComponentChangeService_ComponentRemoved(sender As Object, e As ComponentEventArgs)
        MakeSource()
    End Sub
    
    ' 配置コントロールがリネームされた時
    Private Sub ComponentChangeService_ComponentRename(sender As Object, e As ComponentRenameEventArgs)
        MakeSource()
    End Sub
    
    ' Form を取得して、再帰的にコントロールを把握、ソースコード生成していきます。
    Private Sub MakeSource()
    
        Dim serviceContainer = CType(_DesignSurface.GetService(GetType(IServiceContainer)), IServiceContainer)
        Dim designerHost = CType(serviceContainer.GetService(GetType(IDesignerHost)), IDesignerHost)
        Dim designForm = CType(designerHost.RootComponent, Form)
    
        ' ソースコード生成していく(のは省略)
        ' 生成した文字列は、TabControl など追加して、2ページ目に表示させるなど
    
    End Sub
    

  •  ソースコード生成処理自体は省略しますが、各タイミングを利用して画面デザイン変更と同期するようにします。

  •  以上で本シリーズは終了となります。途中で理解できないままご紹介するという状況になってしまい、申し訳ありませんでした。 最後まで読んでいただきありがとうございました。