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