アクセスカウンタ
QRコード
QRCODE
インフォメーション
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
プロフィール
白波
白波
IT関連をメインに、車・スノボ・家などをカキコする単なる俺メモ。ワッショイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワッショイ
オーナーへメッセージ

2008年04月19日

WinXP+VS2008でDataGridView不具合

MSにやられた。時間返して。。。

Visual Studio 2008 上で DataGridView のスクロール時の動作がおかしいのでMSのサポセンに問い合せてみた。

結果、WinXPのComCtl32のバグにより回避不可能だと。

現象の詳細
===================================
DataGridView にて表示されるスクロールバーは、.NET Framework の
System.Windows.Forms.ScrollBar コントロールでございますが、この .NET Framework の
ScrollBar コントロールは、内部でネイティブのコモン コントロール (ComCtl32) の
スクロールバーを使用しております。

このネイティブのスクロールバーには、内部実装の不備により、スクロールバーの
スクロール動作中に、状態設定などアプリケーションからの明示的なスクロールバーの
状態切り替えが行われた場合に、正常にスクロール処理が完了できないという問題が
ございます。

通常スクロールバーは、マウス ボタンのクリックを受けてスクロール処理を行い、
それに伴って内部で自身の状態を更新します。
スクロールバー上のクリックにおいては、WM_LBUTTONDOWN / WM_LBUTTONUP など複数の
メッセージが生成されますが、それらのメッセージを一定の組み合わせとみなして、
スクロール処理ならびに状態更新処理を正常に完了するようになっております。

しかし、この複数のメッセージの処理が全て完了する前に、内部処理の最中に別途
アプリケーションなど外部からの明示的な状態設定が行われた場合、
スクロールバーに対して現在の処理の中断を要求する WM_CANCELMODE メッセージが
送信されます。

このとき、ネイティブのスクロールバーの問題で、この WM_CANCELMODE メッセージを
正常に処理することができていないため、内部での状態更新処理との不整合が発生します。
その結果、スクロール処理ならびに内部状態の更新処理が正常に完了しない状態となり、
以降のスクロール操作を正常に処理できない状況となります。

これが本件で発生している現象となります。


本件のサンプルでの現象発生状況
-----------------------------------
DataGridView コントロールにて下スクロールバーを行っている状態でデータの更新を
行われると、DataGridView コントロール全体の表示更新処理のため、ScrollBar の
Enabled プロパティが、一旦切り替えられます。
この状況が、上記でご説明いたしました、「内部でのスクロール処理中に外部から
別途状態設定が行われた状況」に該当し、現象が発生いたします。


補足
-----------------------------------
本問題は Windows Vista に付属の ComCtl32 では修正されておりますので、
ご確認くださいましたとおり Vista 上では発生いたしません。


回避策について
===================================
本問題の回避策でございますが、誠に申し訳ございませんが、本問題の発生を回避し、
かつ正常にスクロールバーの状態を維持できるような方法はございません。
誠に恐れ入りますが、もし可能であれば、スクロール操作と同時には DataGridView
コントロールのデータ更新を行われないような実装をご検討いただければと存じます。


MSのサポセンの技術担当者に電話が繋がるまで手続き等で数時間を要したが、対応は悪くなかった。

しかし、技術者に繋がるまでに数人を経たわけだが、どこの会社が請け負ってるんだろう。
おまいら、言葉かみすぎ!!

新人だったのかな。

ちなみに、DataGridViewは.NET Framework 2.0。

同じカテゴリー(ソフト)の記事画像
Windows Server 2008 RC1
同じカテゴリー(ソフト)の記事
 VMware ESXi 3のインストール (2008-12-03 01:35)
 Windows Server 2008 Hyper-V (2008-07-16 18:25)
 IE 8 Beta 1 for Developers (2008-07-16 18:24)
 DataGridView(.Net Fw2.0)の不具合 (2008-07-15 12:54)
 Becky!でPGP (2008-01-10 18:00)
 Windows Server 2008 RC1 (2007-12-23 00:00)
この記事へのコメント
新人に違いないです(・∀・)
Posted by 王子 at 2008年04月20日 00:32
だな。
Posted by 白波 at 2008年04月20日 01:41
状態を更新します。
スクロールバー上のクリックにおいては、WM_LBUTTONDOWN / WM_LBUTTONUP など複数の
メッセージが生成されますが、
Posted by buy jordans at 2011年06月01日 17:42
新人に違いないです(・∀・)
Posted by louis vuitton handbags at 2011年06月18日 18:13
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。