我不得不開發窗體上的一個簡單的菜單,如:如何使用分隔符管理動態菜單?
- 文件
- 選項A
- 選項B
- --------(分離器1)
- 選項C
- 選項d
- --------(隔膜2)
- 選項Ë
每個條目都存儲在DB和是可見或不可見,這取決於連接的用戶權利
例如,用戶「J.Doe」將不會看到選件C和D
我的問題是:如何做,動態避免菜單顯示2個分隔符,因爲顯然,只有一個是需要之間的選項B和E?
我不得不開發窗體上的一個簡單的菜單,如:如何使用分隔符管理動態菜單?
每個條目都存儲在DB和是可見或不可見,這取決於連接的用戶權利
例如,用戶「J.Doe」將不會看到選件C和D
我的問題是:如何做,動態避免菜單顯示2個分隔符,因爲顯然,只有一個是需要之間的選項B和E?
只需添加分隔符,如果以下三個條件都滿足:
這應該不會太難。試着按照這個規範編寫代碼,如果遇到麻煩來到這裏,再次詢問更具體的編碼問題。
UPDATE:看到這裏提出的解決方案,都是針對您的具體問題,我就先走一步,告訴你我是怎麼想解決的普遍問題,用於任何菜單的工作方式配置:
static void DynamicallySetMenuItems(MenuItem menu, UserRole role)
{
var menuItems = GetMenuItems(role);
var previous = menuItems.FirstOrDefault();
if (previous == null)
return;
if (!IsSeparator(previous))
{
menu.MenuItems.Add(previous);
}
foreach (var current in menuItems.Skip(1))
{
if (!IsSeparator(current) ||
!IsSeparator(previous))
{
menu.MenuItems.Add(previous);
}
previous = current;
}
if (IsSeparator(previous))
{
menu.MenuItems.Remove(previous);
}
}
static bool IsSeparator(MenuItem menu)
=> menu.Text == "-";
你剛纔建立菜單上的蒼蠅,因爲這樣:
var myMenu = new ContextMenuStrip(); // works also with tool strip menus, main menu, etc...
int m = 0;
if(/* has option A */)
{
myMenu.Items.Add("Option A");
myMenu.Items[m++].Click += OptionA_Click;
}
if(/* has option B */)
{
myMenu.Items.Add("Option B");
myMenu.Items[m++].Click += OptionB_Click;
}
if(/* has option C or D */)
{
myMenu.Items.Add(new ToolStripSeparator());
m++;
}
if(/* has option C */)
{
myMenu.Items.Add("Option C");
myMenu.Items[m++].Click += OptionC_Click;
}
if(/* has option D */)
{
myMenu.Items.Add("Option D");
myMenu.Items[m++].Click += OptionD_Click;
}
if(/* has option E */)
{
myMenu.Items.Add(new ToolStripSeparator());
myMenu.Items.Add("Option E");
myMenu.Items[++m].Click += OptionE_Click;
}
感謝您的回答 – Austin
什麼工作你做了嘗試解決這個問題? –
我試圖存儲在一個布爾,當我插入一個分隔符。 然後,如果下一個菜單項也是分隔符,所以我不插入它。 但它很混亂,我問我是否沒有正確或最簡單的方法來做到這一點。 – Austin