リッチテキストボックスをリサイズする時、URLが無効になる
対象製品
PlusPak for Windows Forms 8.0J
状況
修正済み
詳細
標準のRichTextBoxコントロールをリサイズする時、エディタに設定されているURLが通常の文字列になりリンクが無効になります。InputMan for Windows Formsのリッチテキストコントロールを使用する場合は、InputManResizePolicyを適用しても同様な現象が発生します。
この現象は、リサイズコンポーネント(GcResize、GcApplicationResize、GcResizePanel)を配置したフォームで発生します。
この現象は、リサイズコンポーネント(GcResize、GcApplicationResize、GcResizePanel)を配置したフォームで発生します。
回避方法
この問題はService Pack 3(v8.0.2017.1121)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で回避可能です。
・RichTextBoxを使う場合
フォームのコードエディタで以下のリサイズポリシーのコードを追加することで現象を回避できます。
[Visual Basic]
Imports GrapeCity.Win.Components
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GcResize1.ResizePolicies.Add(New RichTextBoxResizePolicy())
End Sub
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 = Nothing
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
using GrapeCity.Win.Components;
private void Form1_Load(object sender, EventArgs e)
{
gcResize1.ResizePolicies.Add(new RichTextBoxResizePolicy());
}
public class RichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary dic = new Dictionary();
public override Type TargetType
{
get { return typeof(RichTextBox); }
}
public override void Initialize(Control control)
{
RichTextBox richtTextBox = control as RichTextBox;
if (richtTextBox != null)
{
dic[control] = richtTextBox.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
RichTextBox richTextBox = control as RichTextBox;
if (richTextBox != null)
{
richTextBox.Rtf = null;
richTextBox.Rtf = dic[control];
}
}
}
}
・GcRichTextBoxを使う場合
次のようにInputManResizePolicyのGcRichTextBoxResizePolicyクラスで回避コードを追加することで現象を回避できます。
[Visual Basic]
Public Class GcRichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
・・・
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If Not resizeControl Is Nothing Then
' 【回避方法:次の行を追加】
resizeControl.Rtf = Nothing
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class GcRichTextBoxResizePolicy : NoResizeFontResizePolicy
{
・・・
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
GcRichTextBox richTextBox = control as GcRichTextBox;
if (richTextBox != null)
{
// 【回避方法:次の行を追加】
richTextBox.Rtf = null;
richTextBox.Rtf = dic[control];
}
}
}
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で回避可能です。
・RichTextBoxを使う場合
フォームのコードエディタで以下のリサイズポリシーのコードを追加することで現象を回避できます。
[Visual Basic]
Imports GrapeCity.Win.Components
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GcResize1.ResizePolicies.Add(New RichTextBoxResizePolicy())
End Sub
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 = Nothing
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
using GrapeCity.Win.Components;
private void Form1_Load(object sender, EventArgs e)
{
gcResize1.ResizePolicies.Add(new RichTextBoxResizePolicy());
}
public class RichTextBoxResizePolicy : NoResizeFontResizePolicy
{
Dictionary
public override Type TargetType
{
get { return typeof(RichTextBox); }
}
public override void Initialize(Control control)
{
RichTextBox richtTextBox = control as RichTextBox;
if (richtTextBox != null)
{
dic[control] = richtTextBox.Rtf;
}
}
public override bool CanResizeChildren(Control control)
{
return false;
}
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
RichTextBox richTextBox = control as RichTextBox;
if (richTextBox != null)
{
richTextBox.Rtf = null;
richTextBox.Rtf = dic[control];
}
}
}
}
・GcRichTextBoxを使う場合
次のようにInputManResizePolicyのGcRichTextBoxResizePolicyクラスで回避コードを追加することで現象を回避できます。
[Visual Basic]
Public Class GcRichTextBoxResizePolicy
Inherits NoResizeFontResizePolicy
・・・
Public Overloads Overrides Sub Terminate(control As Control)
If dic.ContainsKey(control) Then
Dim resizeControl As GcRichTextBox = TryCast(control, GcRichTextBox)
If Not resizeControl Is Nothing Then
' 【回避方法:次の行を追加】
resizeControl.Rtf = Nothing
resizeControl.Rtf = dic(control)
End If
End If
End Sub
End Class
[C#]
public class GcRichTextBoxResizePolicy : NoResizeFontResizePolicy
{
・・・
public override void Terminate(Control control)
{
if (dic.ContainsKey(control))
{
GcRichTextBox richTextBox = control as GcRichTextBox;
if (richTextBox != null)
{
// 【回避方法:次の行を追加】
richTextBox.Rtf = null;
richTextBox.Rtf = dic[control];
}
}
}
}
キーワード
PPWI20022