C# winform ListView 的右鍵菜單的下級菜單的選項視情況禁用方法


ListView 和右鍵菜單例如以下圖:


要實現功能是:

1、用戶狀態為【活動】時,改動用戶狀態為【活動】禁用,反之則反。

2、而且僅僅實用戶狀態為【非活動】時,【刪除學員用戶】才是可用狀態。



功能非常easy,解決的方法例如以下:


【Answers】

//依據該行數據‘狀態’來決定顯示右鍵菜單的哪個項
        private void tsmiUpdate_DropDownOpening(object sender, EventArgs e)
        {
            if (lvStudent.SelectedItems[0].SubItems[3].Text == "活動")
            { tsmiInActive.Enabled = true; tsmiActive.Enabled = false; }
            else { tsmiInActive.Enabled = false; tsmiActive.Enabled = true; }
        }


選擇與ListView綁定的右鍵菜單,再選定要彈出下級菜單的【改動用戶狀態為】找到其DropDownOpening(顧名思義:在DropDown正在打開時發生)事件。

然后通過推斷ListView中當前選定行的第四項的值來決定是否禁用其下級彈出菜單。

注意:必需要對兩個項的可用性都確定,否則會出現轉換成非活動后再去轉換時兩個都已經被禁用的情況。

(我這個ListView設置成了選定正行的而不是一個單元格。

事實上主要就是有時候不知道要用什么時間來觸發,想通了事實上也非常easy。)



好了。依據用戶狀態推斷刪除學員用戶這個就簡單了。

//假設沒選中或者選中了列名菜單。取消右鍵菜單的彈出
        private void cmsRightMenu_Opening(object sender, CancelEventArgs e)
        {
            //推斷是否選定項,否則不彈出右鍵菜單
            if(lvStudent.SelectedItems.Count>0)
            {
                //依據用戶狀態來禁用刪除學員用戶
                if(lvStudent.SelectedItems[0].SubItems[3].Text == "活動")
                { tsmiDelete.Enabled = false; }
                else { tsmiDelete.Enabled = true; }
            }
            else
            { e.Cancel = true; }
        }

選擇右鍵菜單的Opening事件。先推斷是否選定某一項,否則不彈出右鍵菜單。再依據用戶狀態禁用刪除選項,否則不禁用(else不能省。后果如之前所說一樣)。

最后效果例如以下圖:



今天的小經驗分享到此結束。

剛開始學習的人請多多不吝賜教。

END.




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM