リサイズ機能を使用してRichTextBoxまたはGcRichTextBoxのリサイズを行うと書式設定がクリアされる
対象製品
PlusPak for Windows Forms 7.0J
状況
修正済み
詳細
RichTextBoxコントロールの文字列にフォントの色やサイズなどの書式を設定している状態で、GcResizeのリサイズ機能を使用してフォームのサイズを変更すると、設定されている書式がすべてクリアされます。
本現象は、GcRichTextBoxコントロールにリサイズポリシー(GcRichTextBoxResizePolicy)を適用した場合も発生します。なお、GcRichTextBoxではツールバー項目の設定もクリアされます。
また、本現象はGcApplicationResizeコンポーネント、GcResizePanelコントロールを使用した場合にも発生します。
本現象は、GcRichTextBoxコントロールにリサイズポリシー(GcRichTextBoxResizePolicy)を適用した場合も発生します。なお、GcRichTextBoxではツールバー項目の設定もクリアされます。
また、本現象はGcApplicationResizeコンポーネント、GcResizePanelコントロールを使用した場合にも発生します。
回避方法
この問題はService Pack 3(v7.0.2016.0428)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で回避可能です。
下記のリサイズポリシーを適用します。
注意:
下記のリサイズポリシーでは、リッチテキストで定義されている書式データ(RTF)を保持するために、コントロール内の文字列や画像オブジェクトのサイズ変更は行いません。
RichTextBoxコントロール
下記のコードを使用してユーザー定義のリサイズポリシーを作成し追加することで回避できます。
ユーザー定義のリサイズポリシーの使い方については、製品ヘルプの次の章を参照してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
[ユーザー定義のリサイズポリシー]
[Visual Basic]
Imports GrapeCity.Win.Components
Public Class RichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
Private dic As New Dictionary(Of Control, String)()
Public Overloads Overrides ReadOnly Property TargetType() As Type
Get
Return GetType(RichTextBox)
End Get
End Property
Public Overloads Overrides Sub Initialize(control As Control)
Dim resizeControl As RichTextBox = TryCast(control, RichTextBox)
If resizeControl IsNot Nothing Then
dic(control) = resizeControl.Rtf
End If
End Sub
Public Overloads Overrides Function CanResizeChildren(control As Control) As Boolean
Return False
End Function
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As RichTextBox = TryCast(control, RichTextBox)
If resizeControl IsNot Nothing Then
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class RichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary dic = new Dictionary();
public override Type TargetType
{
get { return typeof(RichTextBox); }
}
public override void Initialize(Control control)
{
RichTextBox resizeControl = control as RichTextBox;
if (resizeControl != null)
{
dic[control] = resizeControl.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
RichTextBox resizeControl = control as RichTextBox;
resizeControl.Rtf = dic[control];
}
}
}
GcRichTextBoxコントロール
本不具合を修正したGcRichTextBoxResizePolicyを適用することで回避できます。
注意:
プロジェクトに既にInputManResizePolicyが追加され、GcRichTextBoxResizePolicyが適用されていることを前提とします。未適用の場合は、下記の製品ヘルプを参考にしてGcRichTextBoxResizePolicyを適用してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
[基本的な使い方]
1. プロジェクトに追加されているInputManResizePolicy.vb/csファイルを開く。
2. GcRichTextBoxResizePolicyクラスのコードを検索して選択する。
3. 下記のコードを使って元のコードを上書きする。
4. プロジェクトをリビルドする。
[Visual Basic]
Public Class GcRichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
Private dic As New Dictionary(Of Control, String)()
Public Overloads Overrides ReadOnly Property TargetType() As Type
Get
Return GetType(GcRichTextBox)
End Get
End Property
Public Overloads Overrides Sub Initialize(control As Control)
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If resizeControl IsNot Nothing Then
dic(control) = resizeControl.Rtf
End If
End Sub
Public Overloads Overrides Function CanResizeChildren(control As Control) As Boolean
Return False
End Function
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If resizeControl IsNot Nothing Then
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class GcRichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary dic = new Dictionary();
public override Type TargetType
{
get { return typeof(GcRichTextBox); }
}
public override void Initialize(Control control)
{
GcRichTextBox resizeControl = control as GcRichTextBox;
if (resizeControl != null)
{
dic[control] = resizeControl.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
GcRichTextBox resizeControl = control as GcRichTextBox;
resizeControl.Rtf = dic[control];
}
}
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で回避可能です。
下記のリサイズポリシーを適用します。
注意:
下記のリサイズポリシーでは、リッチテキストで定義されている書式データ(RTF)を保持するために、コントロール内の文字列や画像オブジェクトのサイズ変更は行いません。
RichTextBoxコントロール
下記のコードを使用してユーザー定義のリサイズポリシーを作成し追加することで回避できます。
ユーザー定義のリサイズポリシーの使い方については、製品ヘルプの次の章を参照してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
[ユーザー定義のリサイズポリシー]
[Visual Basic]
Imports GrapeCity.Win.Components
Public Class RichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
Private dic As New Dictionary(Of Control, String)()
Public Overloads Overrides ReadOnly Property TargetType() As Type
Get
Return GetType(RichTextBox)
End Get
End Property
Public Overloads Overrides Sub Initialize(control As Control)
Dim resizeControl As RichTextBox = TryCast(control, RichTextBox)
If resizeControl IsNot Nothing Then
dic(control) = resizeControl.Rtf
End If
End Sub
Public Overloads Overrides Function CanResizeChildren(control As Control) As Boolean
Return False
End Function
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As RichTextBox = TryCast(control, RichTextBox)
If resizeControl IsNot Nothing Then
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class RichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary
public override Type TargetType
{
get { return typeof(RichTextBox); }
}
public override void Initialize(Control control)
{
RichTextBox resizeControl = control as RichTextBox;
if (resizeControl != null)
{
dic[control] = resizeControl.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
RichTextBox resizeControl = control as RichTextBox;
resizeControl.Rtf = dic[control];
}
}
}
GcRichTextBoxコントロール
本不具合を修正したGcRichTextBoxResizePolicyを適用することで回避できます。
注意:
プロジェクトに既にInputManResizePolicyが追加され、GcRichTextBoxResizePolicyが適用されていることを前提とします。未適用の場合は、下記の製品ヘルプを参考にしてGcRichTextBoxResizePolicyを適用してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
[基本的な使い方]
1. プロジェクトに追加されているInputManResizePolicy.vb/csファイルを開く。
2. GcRichTextBoxResizePolicyクラスのコードを検索して選択する。
3. 下記のコードを使って元のコードを上書きする。
4. プロジェクトをリビルドする。
[Visual Basic]
Public Class GcRichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
Private dic As New Dictionary(Of Control, String)()
Public Overloads Overrides ReadOnly Property TargetType() As Type
Get
Return GetType(GcRichTextBox)
End Get
End Property
Public Overloads Overrides Sub Initialize(control As Control)
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If resizeControl IsNot Nothing Then
dic(control) = resizeControl.Rtf
End If
End Sub
Public Overloads Overrides Function CanResizeChildren(control As Control) As Boolean
Return False
End Function
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If resizeControl IsNot Nothing Then
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class GcRichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary
public override Type TargetType
{
get { return typeof(GcRichTextBox); }
}
public override void Initialize(Control control)
{
GcRichTextBox resizeControl = control as GcRichTextBox;
if (resizeControl != null)
{
dic[control] = resizeControl.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
GcRichTextBox resizeControl = control as GcRichTextBox;
resizeControl.Rtf = dic[control];
}
}
}
キーワード
PPWI10766