LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

WinForm 中實現 DataGridView 按鈕的禁用效果

admin
2025年6月21日 11:24 本文熱度 57

需求提出

在 WinForm 開發過程中,我們常常會使用 DataGridView 來展示和操作數據。而當需求中要求嵌入按鈕列,并支持按鈕狀態的"啟用 / 禁用"切換時,事情就變得不那么簡單了。

最近我就遇到了這樣一個看似簡單實則棘手的需求:**在 DataGridView 中添加按鈕列,并根據業務邏輯動態控制按鈕是否"可點擊"**。

傳統方案的困擾

面對這個需求,我本能地打開了搜索引擎,一頓 Ctrl + C / Ctrl + V,結果發現:

  • 有的建議重寫 DataGridViewButtonColumn

  • 有的推薦自定義控件;

  • 還有大佬祭出 DataGridViewDisableButtonColumn 這種高階玩法。

說實話,看完之后我差點沒原地去世??——不是不行,而是太折騰!這些方法不僅實現起來復雜,維護成本也極高,尤其對于項目周期緊張、時間有限的小型項目來說,實在難以承受。

于是我陷入了沉思……

思路轉換:從"功能禁用"到"視覺禁用"

既然底層控制按鈕狀態這么難搞,那我們能不能換個思路?

用戶判斷一個按鈕是否"禁用",很多時候是靠視覺感知的。也就是說,只要按鈕看起來像是"被禁用了",用戶就不會去點它!

于是,我決定采用一種"視覺假禁用"的方式,來達到類似禁用的效果。

實現思路

使用 CellFormatting 事件模擬禁用樣式

我們可以通過 DataGridView.CellFormatting 事件,在特定條件下對按鈕單元格進行樣式渲染,讓它看起來像"被禁用了"。

具體做法如下:

1、監聽 CellFormatting 事件;

2、判斷當前是否滿足禁用條件;

3、如果滿足,則將該按鈕單元格的字體顏色、背景色等樣式設置為"灰色系",模擬禁用效果。

代碼如下:

private void dgvCh_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex == 15)
    {
        DataGridViewCell cell = dgvCh.Rows[e.RowIndex].Cells[e.ColumnIndex];
        DataGridViewCell cell2 = dgvCh.Rows[e.RowIndex].Cells[e.ColumnIndex + 1];

        if (cell2.Value != null && cell2.Value.ToString().ToUpper() == "FALSE")
        {
            cell.Style.BackColor = Color.LightGray; // 設置按鈕背景色
            cell.Style.ForeColor = Color.DarkGray;  // 設置按鈕字體顏色
            cell.Style.SelectionBackColor = Color.LightGray; // 設置選中背景色
            cell.Style.SelectionForeColor = Color.DarkGray;  // 設置選中字體顏色
        }
    }
}

注意:這里假設第 16 列(索引為15)是按鈕列,第 17 列(索引為16)用于判斷是否禁用。

看一下效果

?

在點擊事件中加一層邏輯判斷

雖然樣式已經"看起來"禁用了,但為了防止用戶誤操作,我們在 CellContentClick 事件中再加一層邏輯判斷:

private void dgvCh_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex == 15)
    {
        DataGridViewRow DGVR = dgvCh.CurrentRow;
        if (DGVR.Cells[16].Value != null && DGVR.Cells[16].Value.ToString().ToUpper() == "TRUE")
        {
            // 執行上傳文件等實際邏輯
        }
    }
}

這樣一來,即使用戶點了"灰掉"的按鈕,也不會觸發任何操作。

效果展示

通過上述處理,最終實現了如下效果:

  • 符合條件的按鈕列顯示為灰色,仿佛"被禁用了";

  • 用戶看到后自然不會點擊;

  • 即使誤點,也會在點擊事件中被攔截,避免執行錯誤邏輯。

就這樣,按鈕雖然還能點擊,但你一看它那副灰頭土臉的樣子,誰還會點它?

總結:換種思路,輕松解決問題

這波操作,說復雜不復雜,說簡單也不簡單。關鍵在于換個角度思考問題 —— 不去和控件死磕底層,而是用一套"演技 + 判斷"的組合拳,達到了視覺與交互上的"類禁用"效果。

對于中小型項目或時間緊迫的場景,這種"視覺禁用"的方式不失為一種實用又高效的解決方案。

結語

人生就像按鈕,有時得假裝自己壞了。

如果你也被這個問題困擾過,希望這篇文章能幫你少掉幾根頭發

如果這個方法剛好幫到了你,不如點個贊讓我也"看起來像被鼓勵過"吧!

關鍵詞: #WinForm#DataGridView#按鈕禁用#視覺禁用#CellFormatting#CellContentClick#UI優化#交互設計#C##工業軟件開發

最后
如果你覺得這篇文章對你有幫助,不妨點個贊支持一下!你的支持是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。也可以加入微信公眾號[DotNet技術匠] 社區,與其他熱愛技術的同行一起交流心得,共同成長!

作者: feisir

出處:cnblogs.com/feisir/articles/18888893
聲明:網絡內容,僅供學習,尊重版權,侵權速刪,歉意致謝!


該文章在 2025/6/23 14:22:18 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日本免费线上A∨ | 在线视频综合站 | 中文字幕免费大全日本一片 | 日韩AV中文字幕在线播放 | 午夜福利小视频免费国产 | 香港三日本三级三级少妇久久 |