2008-09-17 7 views
2

私は、その中にDataGridViewコントロールとDataGridViewButtonCellセルの列を持つWinFormsアプリケーションを持っています。これらのボタンの1つをクリックするとバックグラウンドタスクが開始され、そのタスクが完了するまでボタンを無効にしたいと思います。WinForms DataGridのボタンセルを無効にするにはどうすればよいですか?

DataGridViewコントロールを無効にすることはできますが、ボタンが無効であることを視覚的に示しません。私は、ボタンが無効になっていることをユーザに見て、ボタンが再び有効になったときにタスクが終了したことに気付きたい。

ボタンを個別に無効にできる方法のためのボーナスポイントです。そのため、タスクの実行中にボタンの1つを有効にしておくことができます。 (実際にボーナスポイントを出すことはできないことに注意してください。)

答えて

3

これまで私が見つけたベストソリューションです。このMSDN articleは、Enabledプロパティを追加するセルクラスのソースコードを提供します。

それは合理的にうまく動作しますが、2つの落とし穴があります。

  1. あなたはどの細胞にEnabledプロパティを設定した後、グリッドを無効にする必要があります。それは、サンプルコードでは、私はそれを逃したことを示しています。
  2. 視覚的な変更のみです。Enabledプロパティでは、実際にボタンを有効または無効にすることはできません。ユーザーはそれをクリックすることができます。私はclickイベントを実行する前にenabledプロパティをチェックすることができましたが、ユーザーがクリックしたときに表示を乱すようにも見えました。代わりに、私はグリッド全体を無効にしました。それは問題ないですが、グリッド全体を無効にすることなくいくつかのボタンを無効にする方法を好むでしょう。

DataGridView FAQにも同様のサンプルがあります。

1

あなたはこの試し与えることができる:あなたはセルをクリックすると...現在の行識別子を持つプロセスは、クラスレベルのリストから、実行されているかどうかを確認するために

  1. チェックを

    を。その場合は、セルのクリックイベントを終了します。

  2. 実行中のプロセスのクラスレベルのリストに行識別子を格納します。
  3. ボタンのテキストを「実行中...」または適切なものに変更します。
  4. 基本的なRunWorkerCompletedイベントハンドラをプロセスにアタッチします(簡単に説明します)。
  5. backgroundWorker.RunWorkerAsync(rowIdentifier)を呼び出します。 DoWorkイベントハンドラで

...

  1. 設定e.Result = e.Argument(または引数と、ご希望の結果の両方を返しますオブジェクトを作成します)

RunWorkerCompletedイベントで...

  1. 実行中のプロセスリスト(e.Resultが識別子)から行識別子を削除します。
  2. ボタンのテキストを「実行中...」に変更します「への 『準備』の興味深い代替のための
+1

おかげで、私はむしろ、ボタンをグレーアウトの標準視覚的な手掛かりにこだわると思います。 –

関連する問題