بدست آوردن زیر منوهای یک منو
وقت بخیر دوستان
من با کد زیر منوهای یک فرم رو چک میکنم و عملیات مد نظرم رو انجام میدم. حالا ممکنه هر منویی زیر منویی هم داشته باشه . اونارو چجوری میشه بدست آورد؟؟:متفکر:
foreach (var item in radMenu1.Items)
{
if (_CheckPermission.CheckAccess(item.Tag.ToString()) )
{
item.Visibility = Telerik.WinControls.ElementVisibility.Visible;
}
else
{
item.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;
}
}
نقل قول: بدست آوردن زیر منوهای یک منو
من تا حالا از radmenu استفاده نکردم، دقیق نمیدونم زیرمنو هاش رو چجوری پیاده سازی میکنه اما در حالت کلی شما از ساختار بازگشتی استفاده کنین، یک متد تعریف کنین که یک ورودی از نوع item میگیره، و داخلش چک کنین مثلا item.items.count مخالف صفره؟ اگر مخالف صفر بود داخل خود متد، دوباره متد رو فراخوانی کنین با ورودی Item.items[0] اما اگر صفر بود، عملیات مورد نظر رو انجام بدین، بعد از نوشتن این متد، بیاین داخل همون foreach اصلی، متد رو به ازای هر ایتم فراخوانی کنین
نقل قول: بدست آوردن زیر منوهای یک منو
سلام
از این استفاده کن - بصورت کامل قرار میدم
//افزودن آیتمهای منو به تری ویو
foreach (ToolStripMenuItem menuItem in ms.Items)
{
treeView1.Nodes.Add(menuItem.Text);
int currentNode = Convert.ToInt32(treeView1.Nodes.Count - 1);
if (menuItem is ToolStripMenuItem)
{
foreach (ToolStripItem dropDown in menuItem.DropDownItems)
{
if (!(dropDown is ToolStripSeparator) && (dropDown is ToolStripItem))
{
int currentChildNode = Convert.ToInt32(treeView1.Nodes[currentNode].Nodes.Count);
treeView1.Nodes[currentNode].Nodes.Add(dropDown.ToString());
if (dropDown is ToolStripMenuItem)
{
ToolStripItemCollection subCollction = ((ToolStripMenuItem)dropDown).DropDownItems;
foreach (ToolStripItem subDropDown in subCollction)
{
if (!(subDropDown is ToolStripSeparator) && (subDropDown is ToolStripItem))
{
treeView1.Nodes[currentNode].Nodes[currentChildNode].Nodes.Add(subDropDown.ToString());
}
}
}
}
}
}
}
نقل قول: بدست آوردن زیر منوهای یک منو
با سلام
توی تلریک رو نمیدونم ولی استاندارد به این شکله:
private IEnumerable<ToolStripMenuItem> GetItems(ToolStripMenuItem item)
{
foreach (ToolStripMenuItem dropDownItem in item.DropDownItems)
{
if (dropDownItem.HasDropDownItems)
{
foreach (ToolStripMenuItem subItem in GetItems(dropDownItem))
yield return subItem;
}
yield return dropDownItem;
}
}
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
private void btnLoad_Click(object sender, EventArgs e)
{
foreach (ToolStripMenuItem toolItem in menuStrip1.Items)
{
allItems.Add(toolItem);
//add sub items
allItems.AddRange(GetItems(toolItem));
}
}
می تونید از allItems استفاده کنید
تنها مشکلش اینه که نباید در منو Separator (خط جدا کننده) داشته باشه
موفق باشید
نقل قول: بدست آوردن زیر منوهای یک منو
ممنون دوست عزیز جالبه که نه خاصیت DropDownItems داره نه خاصیت items
درصورتی که لینکی هم در مورد این موضوع پیدا کردید ممنون میشم راهنماییم کنید. روش بازگشتی خیلی خوبه به نظرم. اینجوری زیر منو ها هم راحت پیدا میشه.
نقل قول: بدست آوردن زیر منوهای یک منو
از همه دوستان تشکر میکنم.
حل شد کافی بود به جای var از RadMenuItem استفاده میکردم.
نقل قول: بدست آوردن زیر منوهای یک منو
نقل قول:
تنها مشکلش اینه که نباید در منو Separator (خط جدا کننده) داشته باشه
سلام
اینجوری ارور نمیده
private IEnumerable<ToolStripMenuItem> GetItems(ToolStripMenuItem item)
{
foreach (ToolStripMenuItem dropDownItem in item.DropDownItems.OfType<ToolStripMenuItem>())
{
if (dropDownItem.HasDropDownItems)
{
foreach (ToolStripMenuItem subItem in GetItems(dropDownItem).OfType<ToolStripMenuItem>() )
yield return subItem;
}
yield return dropDownItem;
}
}