PDA

View Full Version : سوال: حذف نادهای خالی از treeview



mtsoft
سه شنبه 06 فروردین 1392, 07:31 صبح
سلام خدمت همه اساتید محترم

من یه تری ویو تو فرمم دارم که می خوام با یه حلقه نودهایی رو که هیچ فرزندی ندارند رو از تری ویو حذف کنم من خودم کد زیر رو استفاده می کنم اما بهم پیغام خطای Object reference not set to an instance of an object. رو میده
ممنون میشم اگه من رو راهنمایی بفرمایید.


foreach (TreeNode tne in tn.Nodes)
{
if (tne.Nodes.Count == 0) { tn.Nodes.Remove(tne); }
}

mtsoft
چهارشنبه 07 فروردین 1392, 07:47 صبح
سلام از دوستان کسی نیست که راهنمایی کنه ؟

Mahmoud.Afrad
چهارشنبه 07 فروردین 1392, 10:09 صبح
با حذف یک نود ، نودهای بعدی به بالا شیفت پیدا میکنند(یعنی اندیس نودهای بعدی یکی کم میشه) به خاطر همین نود آخر با اندیس قبلی برابر null میشه.
برای این کار از آخرین اندیس شروع به پیمایش کنید:

private void button1_Click(object sender, EventArgs e)
{
for (int i = treeView1.Nodes.Count - 1; i >= 0; i--)
{
if (treeView1.Nodes[i].Nodes.Count == 0)
{
treeView1.Nodes[i].Remove();
}
}
}

mtsoft
چهارشنبه 07 فروردین 1392, 11:27 صبح
مرسی از راهنمایی بسیار عالیتون فقط اگه تری ویو ما ناد های تو در تو داشته باشه باید چی کارکنیم می دونم که باید از توابع بازگشتی استفاده کنیم اما نمی دونم دقیقا چی باید بنویسم و ایا راه دیگه ای داره یا نه؟

tooraj_azizi_1035
چهارشنبه 07 فروردین 1392, 14:05 عصر
Recursive Approach:
void RemoveChildNodes(TreeNode node)
{
if(node.Nodes.Count==0)
node.Remove();
else

foreach(TreeNode n in node.Nodes)
{
RemoveChildNodes(n);
}


و در برنامه اصلی:
RemoveChildNodes(YouTreeView.Nodes[0]);