2012年12月5日水曜日

NetAdvantage(WinForms) AppStylist,MDI,DataBindingを同時に使用する場合の処理

NetAdvantageAppStylistは簡単な設定でアプリケーション全体の外観を変更できるとても便利なツールです。
デザインツールも付属しているので,自分でデザインするのも良いですが,予めスタイル情報ファイルもいくつか用意されているので,手間無くユーザーに外観の選択肢を提供できます。
外観を変更すると,まるで別のアプリケーションを見ているようで新鮮です。
個性の問題だけなく,ユーザーによっては「グリッドの行がストライプのほうが良い」などの要望もありますので,利便性の向上にもつながります。

しかし,MDIアプリケーションでデータバインディングを使ったフォームを使用する場合は注意が必要です。
この場合データバインディングが正しく動作せず,データソースを更新してもエディター系コントロールに反映されません。これは既知の問題であるらしく,この不可解な現象を解決しようと多大な時間をかけることになるかもしれません。
(いかなる条件でも問題が発生するかどうかは分かりませんが,UltraWinGridをマルチバンドで使用し,かつEditorコントロールのDataBindingsを設定した場合は発生しました)

解決のためには,AppStylistを使用しないか,あるいは以下のようにフォームのインスタンスを生成する度にAppStylistをリセットする必要があります。
リセットしたからといって処理にひどく時間がかかったり,表示がちらついたりということはないのですが,フォーム生成の都度リセットを忘れないよう注意が必要です。

Private Sub ShowForm()

    Infragistics.Win.AppStyling.StyleManager.Reset()
    Dim frm1 As New Windows.Forms.Form
    Infragistics.Win.AppStyling.StyleManager.Load("スタイル情報ファイルのパス")

    frm1.MdiParent = Me
    frm1.Show()

End Sub