[PPWI11234]GcResizeコンポーネントによるリサイズ後に、DataGridViewへ行や列を追加してもリサイズが適用されない
対象製品
PlusPak for Windows Forms 7.0J
詳細
GcResizeコンポーネントを使用してDataGridViewのサイズを変更した後に新しい行と列を追加すると、追加された行の高さまたは列の幅がリサイズされず、サイズ変更する前のサイズになります。
本現象はGcApplicationResizeコンポーネント、GcResizePanelコントロールを使用した場合にも発生します。
なお、DataGridViewのColumnCountプロパティを使用して列を追加する時、常に既定の列幅が使用されます。これはDataGridViewの仕様による動作で、GcResizeコンポーネントで変更することはできません。
本現象はGcApplicationResizeコンポーネント、GcResizePanelコントロールを使用した場合にも発生します。
なお、DataGridViewのColumnCountプロパティを使用して列を追加する時、常に既定の列幅が使用されます。これはDataGridViewの仕様による動作で、GcResizeコンポーネントで変更することはできません。
回避方法
この問題はService Pack 3(v7.0.2016.0428)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で行の高さを変更することが可能です。
下記のように問題を修正するユーザー定義のリサイズポリシーを適用します。
ユーザー定義のリサイズポリシーの使い方については、製品ヘルプの次の章を参照してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
+[リサイズポリシーの使い方]
[ユーザー定義のリサイズポリシー]
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.GcResize1.ResizePolicies.Add(New DataGridViewResizePolicyEx())
End Sub
Public Class DataGridViewResizePolicyEx
Inherits GrapeCity.Win.Components.DataGridViewResizePolicy
Public Overrides Sub ResizeFont(control As Control, infos As GrapeCity.Win.Components.ResizeFontInfo)
MyBase.ResizeFont(control, infos)
Dim dataGridView = TryCast(control, DataGridView)
If (dataGridView Is Nothing) Then
Return
End If
Dim rowTemplate = dataGridView.RowTemplate
rowTemplate.DefaultCellStyle.Font = infos.ScaleFont(rowTemplate.DefaultCellStyle.Font)
End Sub
Public Overrides Sub ResizeLayout(control As Control, infos As GrapeCity.Win.Components.ResizeLayoutInfo)
MyBase.ResizeLayout(control, infos)
Dim dataGridView = TryCast(control, DataGridView)
If (dataGridView Is Nothing) Then
Return
End If
Dim rowTemplate = dataGridView.RowTemplate
rowTemplate.Height = infos.ScaleY(rowTemplate.Height)
End Sub
End Class
[C#]
private void Form1_Load(object sender, EventArgs e)
{
gcResize1.ResizePolicies.Add(new DataGridViewResizePolicyEx());
}
public class DataGridViewResizePolicyEx : GrapeCity.Win.Components.DataGridViewResizePolicy
{
public override void ResizeFont(Control control, GrapeCity.Win.Components.ResizeFontInfo infos)
{
base.ResizeFont(control, infos);
DataGridView dataGridView = control as DataGridView;
if ((dataGridView == null))
{
return;
}
DataGridViewRow rowTemplate = dataGridView.RowTemplate;
rowTemplate.DefaultCellStyle.Font = infos.ScaleFont(rowTemplate.DefaultCellStyle.Font);
}
public override void ResizeLayout(Control control, GrapeCity.Win.Components.ResizeLayoutInfo infos)
{
base.ResizeLayout(control, infos);
DataGridView dataGridView = control as DataGridView;
if ((dataGridView == null))
{
return;
}
DataGridViewRow rowTemplate = dataGridView.RowTemplate;
rowTemplate.Height = infos.ScaleY(rowTemplate.Height);
}
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 3より前のバージョンでは次の方法で行の高さを変更することが可能です。
下記のように問題を修正するユーザー定義のリサイズポリシーを適用します。
ユーザー定義のリサイズポリシーの使い方については、製品ヘルプの次の章を参照してください。
+[PlusPak の使い方]
+[レイアウト]
+[GcResize コンポーネント]
+[リサイズポリシー]
+[リサイズポリシーの使い方]
[ユーザー定義のリサイズポリシー]
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.GcResize1.ResizePolicies.Add(New DataGridViewResizePolicyEx())
End Sub
Public Class DataGridViewResizePolicyEx
Inherits GrapeCity.Win.Components.DataGridViewResizePolicy
Public Overrides Sub ResizeFont(control As Control, infos As GrapeCity.Win.Components.ResizeFontInfo)
MyBase.ResizeFont(control, infos)
Dim dataGridView = TryCast(control, DataGridView)
If (dataGridView Is Nothing) Then
Return
End If
Dim rowTemplate = dataGridView.RowTemplate
rowTemplate.DefaultCellStyle.Font = infos.ScaleFont(rowTemplate.DefaultCellStyle.Font)
End Sub
Public Overrides Sub ResizeLayout(control As Control, infos As GrapeCity.Win.Components.ResizeLayoutInfo)
MyBase.ResizeLayout(control, infos)
Dim dataGridView = TryCast(control, DataGridView)
If (dataGridView Is Nothing) Then
Return
End If
Dim rowTemplate = dataGridView.RowTemplate
rowTemplate.Height = infos.ScaleY(rowTemplate.Height)
End Sub
End Class
[C#]
private void Form1_Load(object sender, EventArgs e)
{
gcResize1.ResizePolicies.Add(new DataGridViewResizePolicyEx());
}
public class DataGridViewResizePolicyEx : GrapeCity.Win.Components.DataGridViewResizePolicy
{
public override void ResizeFont(Control control, GrapeCity.Win.Components.ResizeFontInfo infos)
{
base.ResizeFont(control, infos);
DataGridView dataGridView = control as DataGridView;
if ((dataGridView == null))
{
return;
}
DataGridViewRow rowTemplate = dataGridView.RowTemplate;
rowTemplate.DefaultCellStyle.Font = infos.ScaleFont(rowTemplate.DefaultCellStyle.Font);
}
public override void ResizeLayout(Control control, GrapeCity.Win.Components.ResizeLayoutInfo infos)
{
base.ResizeLayout(control, infos);
DataGridView dataGridView = control as DataGridView;
if ((dataGridView == null))
{
return;
}
DataGridViewRow rowTemplate = dataGridView.RowTemplate;
rowTemplate.Height = infos.ScaleY(rowTemplate.Height);
}
}