PDA

View Full Version : دسترسی به آیتم های ContextMenuStrip



Sal_64
یک شنبه 24 آذر 1387, 00:25 صبح
سلام

من تو فرمم چند تا باتم دارم که براشون contextmenustrip تعریف کردم
می تونم به هر کدوم ار منوها به وسیله باتمی که منو به اون اضافه شده دسترسی داشته باشم
و اون منو رو با تمام زیر منوها غیر فعال کنم

ولی اگر بخوام به تک تک زیر منوها دسترسی داشته باشم چکار باید بکنم

به جای اون دو خط قرمز چه کدی باید بزارم ?


void inactive_all_sub_menu()
{
foreach (Control cms in this.Controls)
{
if (cms.GetType() == typeof(Button))
{
if (cms.Name.ToString() == "button1")

foreach(ContextMenuStrip.Items c2 in cms.ContextMenuStrip )
cms.ContextMenuStrip.Items[c2].Enabled = false;

}
}

}با تشکر

RED-C0DE
چهارشنبه 27 آذر 1387, 22:35 عصر
با کمک این تابع بازگشتی پیاده سازیش کردم :



private void button1_Click(object sender, EventArgs e)
{
do_Enable_Menues(button1.ContextMenuStrip.Items, false);
}
private void do_Enable_Menues(ToolStripItemCollection pMenues, bool pEnable)
{
foreach (ToolStripMenuItem subMenu in pMenues)
{
MessageBox.Show(subMenu.Text);
//or everything u like :
//subMenu.Enabled = pEnable;

if (subMenu.HasDropDownItems)
{
do_Enable_Menues(subMenu.DropDownItems, pEnable);
}

}
}

Sal_64
جمعه 29 آذر 1387, 16:41 عصر
سلام

RED-C0DE جان تشکر

برای ToolStripSeparator به مورد بر می خوره داخل پرانتز foreach
برای اون چه باید کرد؟؟

با تشکر

RED-C0DE
جمعه 29 آذر 1387, 17:57 عصر
حواسم به این نبود...
به اینصورت تغییرش بده :

foreach (ToolStripItem item in pMenues)
{
if (item is ToolStripMenuItem)
{
ToolStripMenuItem mnu = item as ToolStripMenuItem;

MessageBox.Show(mnu.Text);
//or everything u like :
//subMenu.Enabled = pEnable;

if (mnu.HasDropDownItems)
{
do_Enable_Menues(mnu.DropDownItems, pEnable);
}
}
}

فکر کنم مشخص باشه ولی :
توی مجموعه آیتمهای موجود در منو حرکت می کنه و اگر که آیتم موجود یک منو (ToolStripMenuItem) باشه ، کاری که می خوای رو انجام می ده...

Sal_64
جمعه 29 آذر 1387, 22:14 عصر
سلام

تشکر
با استفاده از کد شما مورد حل شد

اما سوال دیگه ای

اگر منو دارای زیر منویی باشه و اون زیر منو هم خود منو دیگه ای باشد و همینطور الی آخر...
چطور میشه تنها آخرین زیر منو (مثل برگها در درخت) رو غیر فعال کرد ؟

با تشکر

RED-C0DE
جمعه 29 آذر 1387, 22:38 عصر
اگه HasDropDownItems= false باشه یعنی این منو ، هیچ زیر آیتمی (در اینجا هیچ زیر منویی) نداره و یعنی (مثلا) برگ حساب می شه...