Я пробовал в течение недель о том, как петлить все предметы в моем SubMenu
на MenuStrip
. Моя проблема в том, что если я добавлю новый SubMenu
, я должен ввести код для его повторного цикла для управления моими элементами. В основном я зацикливаю свой SubMenu
только для управления своими товарами. Я хочу, чтобы петля все элементы на уровне MenuStrip
не на уровне подменюкак петли все элементы подменю на уровне полосы меню
вот моя иерархия.
вот мой код
public void startUpRoleControl()
{
loadRoleControl();
disableAllToolStripItems();
bool varmasterDropItem = false;
bool varservicesDropItem = false;
bool varreportsDropItem = false;
bool varmaintenanceDropItem = false;
bool varuseroptionsDropItem = false;
if (dtDBRoleControl.Rows.Count > 0)
{
foreach(DataRow drmaster in dtDBRoleControl.Rows)
{
foreach (ToolStripItem masterDropItem in masterToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
{
if (masterDropItem.Tag != null)
{
if (masterDropItem.Tag.ToString() == drmaster["rprevformname"].ToString() && Convert.ToInt32(drmaster["rprevview"]) == 1)
{
masterDropItem.Visible = true;
varmasterDropItem = true;
break;
}
}
}
}
foreach (DataRow drservices in dtDBRoleControl.Rows)
{
foreach (ToolStripItem servicesDropItem in servicesToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
{
if (servicesDropItem.Tag != null)
{
if (servicesDropItem.Tag.ToString() == drservices["rprevformname"].ToString() && Convert.ToInt32(drservices["rprevview"]) == 1)
{
servicesDropItem.Visible = true;
varservicesDropItem = true;
break;
}
}
}
}
foreach (DataRow drreports in dtDBRoleControl.Rows)
{
foreach (ToolStripItem reportsDropItem in reportsToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
{
if (reportsDropItem.Tag != null)
{
if (reportsDropItem.Tag.ToString() == drreports["rprevformname"].ToString() && Convert.ToInt32(drreports["rprevview"]) == 1)
{
reportsDropItem.Visible = true;
varreportsDropItem=true;
break;
}
}
}
}
foreach (DataRow druseroptions in dtDBRoleControl.Rows)
{
foreach (ToolStripItem useroptionsDropItem in reportsToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
{
if (useroptionsDropItem.Tag != null)
{
if (useroptionsDropItem.Tag.ToString() == druseroptions["rprevformname"].ToString() && Convert.ToInt32(druseroptions["rprevview"]) == 1)
{
useroptionsDropItem.Visible = true;
varuseroptionsDropItem = true;
break;
}
}
}
}
foreach (DataRow drmaintenance in dtDBRoleControl.Rows)
{
foreach (ToolStripItem maintenanceDropItem in maintenanceToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
{
if (maintenanceDropItem.Tag != null)
{
if (maintenanceDropItem.Tag.ToString() == drmaintenance["rprevformname"].ToString() && Convert.ToInt32(drmaintenance["rprevview"]) == 1)
{
maintenanceDropItem.Visible = true;
varmaintenanceDropItem = true;
break;
}
}
}
}
if (varmasterDropItem == true) // shows master item if there is a item in master that are visible
{
masterToolStripMenuItem.Visible = true;
}
if (varservicesDropItem == true)// shows services item if there is a item in services that are visible
{
servicesToolStripMenuItem.Visible = true;
}
if (varreportsDropItem == true)// shows services item if there is a item in services that are visible
{
reportsToolStripMenuItem.Visible = true;
}
if (varmaintenanceDropItem == true)// shows services item if there is a item in services that are visible
{
maintenanceToolStripMenuItem.Visible = true;
}
if (varuseroptionsDropItem == true)// shows services item if there is a item in services that are visible
{
userOptionsToolStripMenuItem.Visible = true;
}
}
, как вы можете видеть больше подменю я имею больше кода я должен контролировать. Есть ли другой способ перебрать все элементы в главном меню. Я использую базу данных для контроля видимости всех пунктов меню. есть ли способ, который использует минимальный оператор цикла, а не цикл в подменю
Могу ли я предложить, было бы здорово, если бы вы могли предоставить нам обзор ваших пунктов меню. Я имею в виду, что только иерархия ваших пунктов меню будет хорошей. –
my heirarchy - menustrip -> submenu -> menuitem – Mandz
Главное меню -> мастер -> мастер-работник. есть ли другой способ автоматического обнаружения всех элементов в моей основной полосе меню? – Mandz