9

WinFormアプリケーションにDataGridViewがあり、

this.dgvDte.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;

私のプロジェクトを実行すると、時々フォームが開きますが、常にこのエラーが発生するわけではありません

「System.InvalidOperationException:自動入力された列のサイズ変更中は、この操作を実行できません。」

どんな体でもそれが何が起こるか私を助けることができますか?

4

3 に答える 3

19

this.dataGridView1.ColumnHeadersHeightSizeModeに設定されAutoSizeます。

DataGridViewの作成中に、マウスが突然Columnヘッダーが配置される位置にある場合、DataGridViewはCellEnterイベントを処理し、列などのサイズを変更しようとしますが、現在、DataGridViewはまだ作成中です。

その結果、aInvalidOperationがスローされます。

回避策は次のとおりです。

顧客提供のプロジェクト、GridWrapper.csファイルで、次の行を後に置きますInitializeComponent();

this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

GridWrapper_Loadメソッドに次の行を入力します。

this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;

多くのお客様は、マイクロソフトやコミュニティの他のメンバーが目的の動作を実現する方法を推奨できるフォーラムで、このような問題について話し合うことが役立つと感じています。

リンクで答える

于 2014-10-29T10:35:25.177 に答える
4

MSフォーラム(MSによる)で報告されているように、例外はDataGridViewによってスローされます。私の知る限り、これは、コントロールが初期化されたときにマウスカーソルがdatagridviewclientrectangle内にあるときに発生します。MSは、列のサイズ変更イベントとセル入力イベントが同時に発生し、例外がスローされることを(「設計により」)許可していることを通知します。提案された回避策は私の問題を解決しませんでした。

MSはこの問題の修正に関心がないようであるため、私にとっては2つの解決策が機能することがわかりました。

  1. 新しいフォームが「安全な」位置で開き、マウスカーソルの邪魔にならないことを確認してください
  2. フォームのコンストラクターの実行中に、マウスカーソルを保存位置に移動します

'System.Windows.Forms.Cursor.Position'を使用して、現在のマウス画面の位置を取得および設定できます。

ユーザー入力なしでマウスカーソルを移動することは必ずしも評価されませんが、アプリケーションで一貫して実行する場合、それは私にとって最も受け入れられるオプションです。

これは、DataGridViewを含むフォームのコンストラクターで使用する傾向があるコードです(InitializeComponentメソッドの後)。

            Cursor.Position = this.PointToScreen(new Point(this.Width/2, -10));

これにより、カーソルがタイトルバーのフォームの中央に配置されます。カーソルを画面外に移動しないように、いくつかのチェックを行う必要がある場合があります。

これが少しお役に立てば幸いです。

于 2013-10-23T23:58:08.980 に答える
1

おそらく、値がロードされている間、値を繰り返し処理していますか?アプリケーションを待機させるか、これらの操作をロックしてみてください。

于 2013-02-18T10:28:44.220 に答える