DataGridView コントロールのセル間のフォーカス移動時に、水平スクロール バーがスクロールしないことがあります。

現象
DataGridView コントロールの任意のセルを選択し、Tab キーや Shift+Tab キーを押下すると、各セル間でフォーカスを移動することが可能です。
また、DataGridView コントロールの水平スクロール バーを表示している構成で、DataGridView コントロール上に表示されていないセルもしくは一部しか表示されていないセルへフォーカスを移動すると、フォーカス移動先のセル全体を DataGridView コントロール上に表示するために、DataGridView コントロールの水平スクロール バーがスクロールします。

ところが、DataGridView コントロールの中に既定の 100 ピクセルよりも大きなカラム幅を設定されているカラムが存在していた場合、最前列のセルから最後列のセルへの移動や、最後列のセルから最前列のセルへの移動等、DataGridView コントロール上に表示されていないセルへフォーカスを移動したにもかかわらず、水平スクロール バーがまったくスクロールしない現象が発生することがあります。
原因
この現象は、DataGridView コントロール内部で、水平スクロールする必要があるカラム数を算出するためのアルゴリズムに問題があるために発生します。

DataGridView コントロール上で各セル間のフォーカス移動が発生すると、DataGridView コントロール内部では、フォーカスの移動先となるセル全体を DataGridView コントロール上で表示するために、カラム何個分の水平スクロールが必要になるのかを動的に計算します。
この計算は、DataGridView コントロールの横幅と、表示中の DataGridView コントロールの各カラム幅を基に行われます。

しかしながら、このカラム数を算出するアルゴリズムには問題があり、DataGridView コントロールの横幅と、表示中の DataGridView コントロールの各カラム幅によっては、水平スクロール バーがまったくスクロールしない現象が発生することがあります。
回避策
水平スクロール バーを表示しない構成で DataGridView コントロールを利用するか、DataGridView コントロール内で使用する各カラムの幅を、既定サイズの 100 ピクセルもしくは 100 ピクセルより小さいサイズに設定して利用してください。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2703427 - 最終更新日: 05/28/2012 02:59:00 - リビジョン: 1.0

Microsoft .NET Framework 2.0, Microsoft .NET Framework 3.0, Microsoft .NET Framework 3.5, Microsoft .NET Framework 4.0

  • kbbug kbnofix kbexpertiseinter kbexpertiseadvanced KB2703427
フィードバック