PDA

View Full Version : select node treeview



xxxsenatorxxx
چهارشنبه 23 فروردین 1391, 23:16 عصر
سلام
میخوام وقتی اسم یک شاخه از تری ویو چند لایه تو تکست باکس نوشته شد و دکمه رو بزنم اون ند اکسپند و سلکت بشه.مثلا تو تکست باکس بنویسم Node12 و اون ند باز و انتخاب بشه
ممنون

esiprogrammer
چهارشنبه 23 فروردین 1391, 23:27 عصر
سلام
میخوام وقتی اسم یک شاخه از تری ویو چند لایه تو تکست باکس نوشته شد و دکمه رو بزنم اون ند اکسپند و سلکت بشه.مثلا تو تکست باکس بنویسم Node12 و اون ند باز و انتخاب بشه
ممنون

treeView1.Nodes[5]

xxxsenatorxxx
جمعه 25 فروردین 1391, 18:36 عصر
treeView1.Nodes[5]


سلام .من میخوام با ورودی انجام بشه یعنی اگر 4 یا 5 سطحی بود چی؟؟؟؟؟؟؟؟؟؟؟؟؟؟
یکی بهم گفت باید با تابع ریکورسیو کل تری ویو رو پیمایش کنی و لی من بلد نیستم

Hybrid
جمعه 25 فروردین 1391, 19:06 عصر
سلام دوست عزیز ،

omid_csh
جمعه 25 فروردین 1391, 19:43 عصر
سلام
private void button1_Click(object sender, EventArgs e)
{
//پیدا کردن گره مورد نظر در هر سطحی
TreeNode node = FindRecursive(textBox1.Text);

//در صورت پیدا شدن
if (node != null)
{
CollapseNodes(treeView1.Nodes);
CheckNodes(treeView1.Nodes, false);

//بسط دادن تمامی گره ها
node.ExpandAll();

//
node.Checked = true;

//چک زدن تمامی گره های فرزند
CheckNodes(node.Nodes, true);

//بسط دادن گره های والد
TreeNode parentNode = node;

while (parentNode != null)
{
parentNode.Expand();
parentNode = parentNode.Parent;
}
}
}

private void CollapseNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
node.Collapse();
}

private void CheckNodes(TreeNodeCollection nodes, bool isChecked)
{
foreach (TreeNode n in nodes)
{
CheckRecursive(n, isChecked);
}
}

private void CheckRecursive(TreeNode treeNode, bool isChecked)
{
treeNode.Checked = isChecked;
// Check each node recursively.
foreach (TreeNode tn in treeNode.Nodes)
{
CheckRecursive(tn, isChecked);
}
}

private TreeNode FindNode(TreeNode treeNode, string name)
{
if (treeNode.Text == name)
return treeNode;

// find node recursively.
foreach (TreeNode tn in treeNode.Nodes)
{
TreeNode node = null;
node = FindNode(tn, name);
if (node != null)
return node;
}

return null;
}

private TreeNode FindRecursive(string name)
{
TreeNodeCollection nodes = treeView1.Nodes;
TreeNode node = null;

foreach (TreeNode n in nodes)
{
node = FindNode(n, name);
if (node != null)
return node;
}

return null;
}

xxxsenatorxxx
جمعه 25 فروردین 1391, 21:42 عصر
سلام دوست عزیز ،
ممنون ولی سوال من برای چند لایه بود ولی فایل شما فقط لایه اول رو چک میکنه.من از کد دوستمون omid_csh (http://barnamenevis.org/member.php?248204-omid_csh) استفاده کردم ولی دو تا اشکال داره یکیش اینه تمام پرنت های هم لایه اون ند رو باز میکنه و دوم اینکه اون ند رو سلکت یا هایلایت نمیکنه.ممنون

cherchil_hra
شنبه 26 فروردین 1391, 12:06 عصر
شما از تابع find درختت می تونی استفاده کنی

از این کد استفاده کن:
TreeNode[] tn =treeView1.Nodes.Find(pkey, True);
treeView1.SelectedNode = tn[0];

پارامتر اول: مقداری که می خواهی دنبالش بگردی (مثل نام نود)
پارامتر دوم: اگه بخواهی زیر مجموعه ها (بچه های یک نود) هم جستجو بشوند

درآخر هم treeview را برابر با نود پیدا شده قرار میدی، خودش expand می کنه

بنابراین نام نودهات رو طوری انتخاب کن که به صورت یکتا باشه و نتیجه جستجوت همیشه شامل صفر (پیدا نکردن) یا یک نود باشه.