作成日: 2024/01/19 最終更新日: 2024/01/31
文書種別
制限事項
詳細
次の条件が揃った場合、GcMdiTabControlを使用したMDI子フォームに配置されたグリッドコントロール(DataGridViewやGcMultiRowなど)の左上隅のセル位置情報を正しく取得できません。
・グリッドコントロールのAnchorプロパティにRightまたはBottomが設定されている
・グリッドコントロールのある子フォームをアクティブなフォームに切り替えている
・子フォームのEnterもしくはActivatedイベント内でグリッドの最初のセル位置を参照している
現象が発生する際に、DataGridViewではFirstDisplayedCellが"Null"になり参照エラーになります。GcMultiRowの場合、FirstDisplayedCellPositionのIsEmptyが"True"になります。
本現象はGcMdiTabControlの制限事項です。
Mdi子フォームが非表示になる時、フォームのサイズが一旦最小化されます。その場合、AnchorがRightまたはBottomに設定されているグリッドのサイズも(0, 0)になるので、現在表示されている最初のセル位置がなくなります。フォームが再度アクティブになる際、グリッドコントロールは復元されますが、元の状態に戻る前に最初のセル位置を参照しようとすると正しい値を取得できません。
・グリッドコントロールのAnchorプロパティにRightまたはBottomが設定されている
・グリッドコントロールのある子フォームをアクティブなフォームに切り替えている
・子フォームのEnterもしくはActivatedイベント内でグリッドの最初のセル位置を参照している
現象が発生する際に、DataGridViewではFirstDisplayedCellが"Null"になり参照エラーになります。GcMultiRowの場合、FirstDisplayedCellPositionのIsEmptyが"True"になります。
本現象はGcMdiTabControlの制限事項です。
Mdi子フォームが非表示になる時、フォームのサイズが一旦最小化されます。その場合、AnchorがRightまたはBottomに設定されているグリッドのサイズも(0, 0)になるので、現在表示されている最初のセル位置がなくなります。フォームが再度アクティブになる際、グリッドコントロールは復元されますが、元の状態に戻る前に最初のセル位置を参照しようとすると正しい値を取得できません。
回避方法
フォームのActivatedイベントで次のコードを追加することで最初のセル位置を取得することができます。
なお、Enterイベントでは正しく取得することができません。
private void Form1_Activated(object sender, EventArgs e)
{
// 回避方法
this.Activated -= Form1_Activated;
this.Activated += Form1_Activated;
// 最初のセル位置の取得
Console.WriteLine(gcMultiRow1.FirstDisplayedCellPosition.ToString());
}
なお、Enterイベントでは正しく取得することができません。
private void Form1_Activated(object sender, EventArgs e)
{
// 回避方法
this.Activated -= Form1_Activated;
this.Activated += Form1_Activated;
// 最初のセル位置の取得
Console.WriteLine(gcMultiRow1.FirstDisplayedCellPosition.ToString());
}