GcStylePlusを使用した場合、コントロールの外観スタイルを動的に変更することができない

文書番号 : 39560     文書種別 : 制限事項     登録日 : 2016/09/28     最終更新日 : 2016/09/28
文書を印刷する
対象製品
PlusPak for Windows Forms 7.0J
詳細
GcStylePlusコンポーネントを使用してコントロールの外観を設定した後、コントロールのプロパティで直接にスタイル設定を変更しても、GcStylePlusで設定したスタイルに戻ってしまいます。
例えば、GcStylePlusでActiveStyleを設定した後テキストコントロールのBackColorプロパティを設定すると、
テキストコントロールからフォーカスが外れるタイミングでGcStylePlusで設定した元の背景色に戻ってしまいます。

これは製品の制限事項です。GcStylePlusは、動的に変更されたコントロールのスタイルを反映することはできません。
回避方法
本制限事項を回避するには、変更するスタイル設定を独自に保存して、GcStylePlusのStyleChangedイベントで明示的にコントロールへ設定してください。

次のサンプルコードでは、フォームに2つのTextBoxコントロールとGcStylePlusを配置し、ActiveStyleであらかじめ背景色を設定していることを仮定します。

[Visual Basic]
Imports GrapeCity.Win.Components

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 背景色の変更
        TextBox1.BackColor = Color.Red
        TextBox2.BackColor = Color.Red
        ' 変更後のスタイルの保存
        TextBox1.Tag = TextBox1.BackColor
        TextBox2.Tag = TextBox2.BackColor

    End Sub

    Private Sub GcStylePlus1_StyleChanged(sender As Object, e As StyleChangedEventArgs) Handles GcStylePlus1.StyleChanged
        ' 変更後のスタイルの設定
        If e.ThemeState = GrapeCity.Win.Common.ThemeStates.Normal Then
            If TypeOf e.Control.Tag Is Color Then
                e.Control.BackColor = e.Control.Tag
            End If
        End If
    End Sub

[C#]
        private void button1_Click(object sender, EventArgs e)
        {
            this.TextBox1.BackColor = Color.Gray;
            this.TextBox2.BackColor = Color.Gray;
            // 変更後のスタイルの保存
            this.TextBox1.Tag = TextBox1.BackColor;
            this.TextBox2.Tag = TextBox2.BackColor;
        }

        private void gcStylePlus1_StyleChanged(object sender, GrapeCity.Win.Components.StyleChangedEventArgs e)
        {
            // 変更後のスタイルの設定
            if (e.ThemeState == GrapeCity.Win.Common.ThemeStates.Normal)
            {
                if (e.Control.Tag is Color)
                {
                    Color myColor = (Color)e.Control.Tag;
                    e.Control.BackColor = myColor;
                }
            }
        }