2008-09-17 44 views
2

我有一個DataGridView控件和一列DataGridViewButtonCell單元格的WinForms應用程序。當我點擊其中一個按鈕時,它會啓動一個後臺任務,並且我希望禁用這些按鈕,直到該任務完成。如何禁用WinForms DataGrid中的按鈕單元格?

我可以禁用DataGridView控件,但不會顯示按鈕被禁用的可視指示。我希望用戶看到按鈕被禁用,並且要注意當再次啓用按鈕時任務已完成。

允許我單獨禁用按鈕的方法的加分點,因此我可以在任務運行時啓用其中一個按鈕。 (請注意,我實際上無法給出獎勵積分。)

回答

3

這是迄今爲止我找到的最佳解決方案。這MSDN article給出了添加Enabled屬性的單元類的源代碼。

它的工作原理相當不錯,但有兩個陷阱:

  1. 你必須設置任何細胞Enabled屬性後,電網失效。它顯示在示例代碼中,但我錯過了它。
  2. 這只是一個視覺上的改變,設置Enabled屬性實際上並不啓用或禁用按鈕。用戶仍然可以點擊它。我可以在執行click事件之前檢查啓用的屬性,但當用戶點擊它時,它似乎也弄亂了外觀。相反,我只是禁用了整個電網。這對我來說很好,但我更喜歡一種方法,允許禁用某些按鈕而不禁用整個網格。

DataGridView FAQ中有類似的樣本。

1

你可以試試這個:

當您單擊單元格...

  1. 檢查,看是否與當前行標識符的過程是從一個類級別列表運行;如果是這樣,請退出單元格單擊事件。
  2. 將行標識符存儲在正在運行的進程的類級別列表中。
  3. 將按鈕文本更改爲「Running ...」或其他適當的內容。
  4. 將一個基本的RunWorkerCompleted事件處理程序附加到您的進程(稍後解釋)。
  5. 調用backgroundWorker.RunWorkerAsync(rowIdentifier)。

在DoWork的事件處理程序...

  1. 設置e.Result = e.Argument(或創建一個對象,將返回兩個參數,你想要的結果)

在RunWorkerCompleted event hanlder ...

  1. 從正在運行的進程列表中刪除行標識符(e.Result是標識符)。
  2. 將按鈕文字從「正在運行...「到」就緒「
+1

感謝您提供了一個有趣的替代方案,但我寧願堅持使用灰色按鈕的標準視覺提示。 – 2008-09-17 18:57:34

相關問題