PDA

View Full Version : کسی میتونه با TreeView کار کنه؟



Developer Programmer
دوشنبه 04 خرداد 1388, 20:51 عصر
یه تکه کدی نوشتم که لیست تمام منوها و زیر منوهای استفاده شده در فرم رو لیست میکنه


TraceToolStripItem( menuStrip1.Items );

private void TraceToolStripItem( ToolStripItemCollection menus )
{
ToolStripMenuItem t = new ToolStripMenuItem();

foreach ( ToolStripItem c in menus )
{
if ( c is ToolStripMenuItem )
{
t = (ToolStripMenuItem) c;
// checkedListBox1.Items.Add( t.Text );
TraceToolStripItem( t.DropDownItems );
}
}
}


منتها میخوام هر بار که آیتمی پیدا شد، اون رو به TreeView اضافه کنم و یک ساختار درختی از منو و زیر منوهای اون ایجاد کنم.

کسی میتونه کمک کنه؟

ASKaffash
سه شنبه 05 خرداد 1388, 09:19 صبح
سلام
به نظر من باید از MenuStrip استفاده کنید در هرحال کد شما را برای TreeView دستکاری کردم :


private void TraceToolStripItem(ToolStripItemCollection menus, string Parent)
{
ToolStripMenuItem t = new ToolStripMenuItem();
foreach (ToolStripItem c in menus)
{
if (c is ToolStripMenuItem)
{
t = (ToolStripMenuItem)c;
this.treeView1.Nodes[Parent].Nodes.Add(t.Text);
TraceToolStripItem(t.DropDownItems, t.Name);
}
}
}

Developer Programmer
سه شنبه 05 خرداد 1388, 20:45 عصر
با تشکر فراوان از زحمتی که کشیدین
جسارتا در بالاترین سطح، چطور باید فراخوانی بشه ؟ من parent رو با رشته تهی جایگزین کردم اما قبول نکرد


treeView1.Nodes.Clear();
treeView1.Nodes.Add( "Menu" );
TraceToolStripItem( menuStrip1.Items , "Menu" );

ASKaffash
چهارشنبه 06 خرداد 1388, 13:25 عصر
سلام
به همین علت گفتم که از MenuStrip استفاده شود این کد کامل است و تست شده :


public Form2()
{
InitializeComponent();
TreeNode MTN = new TreeNode("Main Menu");
MTN.Name = "Master";
this.treeView1.Nodes.Add(MTN);
ControlFinder(this.menuStrip1, MTN.Name, "");
}
internal void ControlFinder(MenuStrip ContainerName, string ParentKey, string ChildKey)
{
GetObjects(ContainerName, ParentKey, ChildKey);
for (int i = 0; i < ContainerName.Items.Count; i++)
{
string SubChildKey = ChildKey + "." + ContainerName.Items[i].Name;
if (ContainerName.Items[i] is ToolStripMenuItem)
ControlFinder((ToolStripMenuItem)ContainerName.Ite ms[i], ChildKey, SubChildKey);
else
GetObjects(ContainerName.Items[i], ChildKey, SubChildKey);
}
}
internal void ControlFinder(ToolStripMenuItem ContainerName, string ParentKey, string ChildKey)
{
GetObjects(ContainerName, ParentKey, ChildKey);
for (int i = 0; i < ContainerName.DropDownItems.Count; i++)
{
string SubChildKey = ChildKey + "." + ContainerName.DropDownItems[i].Name;
if (ContainerName.DropDownItems[i] is ToolStripMenuItem)
ControlFinder((ToolStripMenuItem)ContainerName.Dro pDownItems[i], ChildKey, SubChildKey);
else
GetObjects(ContainerName.DropDownItems[i], ChildKey, SubChildKey);
}
}
internal void GetObjects(object ObjectName, string PKey, string Key)
{
TreeNode TN = this.treeView1.Nodes.Find(PKey, true)[0];
TN.Nodes.Add(Key, ObjectName.ToString(), Key);
}
}