個人網(wǎng)站設(shè)計與制作設(shè)計思路合肥網(wǎng)絡(luò)推廣有限公司
初級代碼游戲的專欄介紹與文章目錄-CSDN博客
我的github:codetoys,所有代碼都將會位于ctfc庫中。已經(jīng)放入庫中我會指出在庫中的位置。
這些代碼大部分以Linux為目標但部分代碼是純C++的,可以在任何平臺上使用。
源碼指引:github源碼指引_初級代碼游戲的博客-CSDN博客
? ? ? ? 本文將指導(dǎo)你使用菜單和右鍵菜單以及給菜單項設(shè)置選中標記。
目錄
一、添加菜單
二、設(shè)置菜單項選中狀態(tài)
三、合理處理菜單組和選中狀態(tài)
四、添加右鍵菜單
一、添加菜單
? ? ? ? 在工具欄找到MenuStrip,放到窗口就可以了:
? ? ? ? 然后就是編輯菜單項,給每個菜單項設(shè)置屬性,最重要的是“(Name)”?,這個是菜單項的ID。雙擊菜單項就會自動添加事件處理程序。
? ? ? ? 事件處理程序一般是:
private void 菜單項ID_Click(object sender, EventArgs e)
{
}
? ? ? ? 這部分應(yīng)該很簡單了。
二、設(shè)置菜單項選中狀態(tài)
? ? ? ? 有時候一組菜單是一組選項,會影響后續(xù)操作,也需要回頭查看之前選的是哪個菜單,這種情形最好設(shè)置一下菜單的選中狀態(tài),例如下面這個菜單:
? ? ? ? 這種用法很常見吧。實現(xiàn)起來也很簡單:
菜單項ID.Checked = true;
三、合理處理菜單組和選中狀態(tài)
? ? ? ? 設(shè)置選中狀態(tài)很簡單,在菜單處理程序里面一句話就能搞定,但是別的菜單項不需要取消選中狀態(tài)嗎?所以這里面就要懂一點腦子,把代碼寫得合理一點。
- 定義一個枚舉,對應(yīng)每個菜單項
- 定義一個變量,記錄當(dāng)前選擇的菜單項
- 在每個菜單處理程序里設(shè)置變量,然后更新所有菜單的狀態(tài)(顯然應(yīng)該寫成一個獨立方法)
- 在其他地方根據(jù)變量值來分別處理
? ? ? ? 代碼示例:
//定義枚舉和枚舉變量 private enum SHOW_TYPE { ALL, NEW, CONFIGED, SELECTED }private SHOW_TYPE current_show_type = SHOW_TYPE.ALL;//更新全部菜單項private void UpdateMenuShowType(){this.menu_show_all.Checked = current_show_type == SHOW_TYPE.ALL;this.menu_show_new.Checked = current_show_type == SHOW_TYPE.NEW;this.menu_show_configed.Checked = current_show_type == SHOW_TYPE.CONFIGED;this.menu_show_selected.Checked = current_show_type == SHOW_TYPE.SELECTED;}
//每個菜單的處理程序private void menu_show_all_Click(object sender, EventArgs e){current_show_type = SHOW_TYPE.ALL;UpdateMenuShowType();}private void menu_show_new_Click(object sender, EventArgs e){current_show_type = SHOW_TYPE.NEW;UpdateMenuShowType();}private void menu_show_configed_Click(object sender, EventArgs e){current_show_type = SHOW_TYPE.CONFIGED;UpdateMenuShowType();}private void menu_show_selected_Click(object sender, EventArgs e){current_show_type = SHOW_TYPE.SELECTED;UpdateMenuShowType();}//其他代碼,根據(jù)變量值分別處理private void refesh_right_Click(){if (current_show_type == SHOW_TYPE.SELECTED){。。。。。。}else if (current_show_type == SHOW_TYPE.CONFIGED){。。。。。。}}
四、添加右鍵菜單
? ? ? ? 右鍵菜單是另一個控件:ContextMenuStrip,編輯菜單的操作和窗口菜單并沒有什么區(qū)別。
? ? ? ? 右鍵菜單和窗口的菜單的主要區(qū)別是右鍵菜單需要在和合適的位置彈出,因此多用代碼來實現(xiàn)。處理窗口或控件的鼠標事件,根據(jù)鼠標位置彈出指定的右鍵菜單。
? ? ? ? 例如在列表視圖里僅當(dāng)鼠標位于有效行之上的時候彈出,空白位置不彈出:
private void listView_MouseClick(object sender, MouseEventArgs e){ListView listView = (ListView)sender;ListViewItem? item = listView.GetItemAt(e.X, e.Y);if (item != null && e.Button == MouseButtons.Right){contextMenuStrip_1.Show(listView, e.X, e.Y);}}
? ? ? ? 用來顯示右鍵菜單的僅僅是右鍵菜單對象的Show方法而已,參數(shù)也很簡單:父窗口/控件,鼠標位置,在這里參數(shù)都是直接來自鼠標事件的參數(shù)的。
(這里是文檔結(jié)束)