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中當前選定行的第四項的值來決定是否禁用其下級彈出菜單。
注意:必需要對兩個項的可用性都確定,否則會出現轉換成非活動后再去轉換時兩個都已經被禁用的情況。
(我這個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.