簡體   English   中英

如何禁用WinForms DataGrid中的按鈕單元?

[英]How do I disable a button cell in a WinForms DataGrid?

我有一個帶有DataGridView控件的WinForms應用程序,其中包含一列DataGridViewButtonCell單元格。 當我單擊這些按鈕之一時,它將啟動一個后台任務,並且我想禁用這些按鈕,直到該任務完成。

我可以禁用DataGridView控件,但是它無法直觀顯示該按鈕已被禁用。 我希望用戶看到按鈕被禁用,並注意到當再次啟用按鈕時任務已完成。

獎勵積分是一種允許我單獨禁用按鈕的方法,因此我可以在任務運行時將其中一個按鈕保持啟用狀態。 (請注意,我實際上無法給出獎勵積分。)

這是到目前為止我找到的最好的解決方案。 MSDN本文提供了添加Enabled屬性的單元格類的源代碼。

它工作得相當好,但是有兩個陷阱:

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

DataGridView FAQ中有一個類似的示例。

您可以嘗試一下:

當您單擊單元格時...

  1. 檢查具有當前行標識符的進程是否正在從類級別列表中運行; 如果是這樣,請退出單元格單擊事件。
  2. 將行標識符存儲在正在運行的進程的類級別列表中。
  3. 將按鈕文本更改為“正在運行...”或其他適當的方法。
  4. 將基本的RunWorkerCompleted事件處理程序附加到您的流程中(稍后說明)。
  5. 調用backgroundWorker.RunWorkerAsync(rowIdentifier)。

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

  1. 設置e.Result = e.Argument(或創建一個將同時返回參數和所需結果的對象)

在RunWorkerCompleted事件處理程序中...

  1. 從正在運行的進程列表中刪除行標識符(例如,結果為標識符)。
  2. 將按鈕文本從“正在運行...”更改為“就緒”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM