PDA

View Full Version : سوال: ایجاد والد و فرزند در Treeview



samin_panahi
جمعه 11 مرداد 1392, 00:54 صبح
http://venia.net84.net/up/4fac8fb3c9e1.png

mehrdad1991h
جمعه 11 مرداد 1392, 22:47 عصر
سلام
منظورت را درست متوجه نشدم
مثال میزنم بگو درست میگم یا نه
(مثلا ما این را داریم :)
ROOT1-
NODE1
NODE2
NODE3
یکی دیگه هم داریم اینجوری مثلا
ROOT1-
NODE4
NODE5

حالا مشترکشون ROOT1 هست
میخوام نتیجه اینجوری بشه
ROOT1-
NODE1
NODE2
NODE3
NODE4
NODE5


همین منظورت بود ؟

samin_panahi
شنبه 12 مرداد 1392, 00:47 صبح
سلام
منظورت را درست متوجه نشدم
مثال میزنم بگو درست میگم یا نه....




تقریبا!
ببین فرض می کنم یه جمله دارم : " سلام، من از دیدنتون خوشحالم "
این رو تو برنامه به صورت درختی نمایش می دیم می شه:

http://upload7.ir/images/34458566589813890261.png


حالا جمله ی بعدی رو وارد می کنیم: " سلام، من از دیدنتون ناراحتم "
اینجا باید قبلی رو بررسی کنه مشترکاتش رو بذاره کنار، نود رو اونجایی که باید، اضافه کنه می شه:

http://upload7.ir/images/52790513203134880532.png


حالا جمله ی بعدی رو وارد می کنیم: " سلام، من از آشنایی با شما خوشحالم " که می شه:

http://upload7.ir/images/80322885136498660407.png


همین طور تا آخر، ولی اگه جمله ها یه جور نبودن جمله ی دوم رو تو یه ساختار درختی جدید نشونش بده

mehrdad1991h
شنبه 12 مرداد 1392, 11:17 صبح
خوب این همونه که من گفتم دیگه من یک شاخه ای مثال زدم شما همینجوری ادامه دادیش
روش کار برای شما باید به این صورت باشه که شما لیست کامل از کلماتی که در جملاتت استفاده میکنی را اماده میکنی
بعد هر کدام را به عنوان یک نود در نظر میگیری و برای هر کدام یک اسم میزاری
(نکته : در مرحله فوق اسم نود میتونه همون نام کلمه باشه در صورتی که مک)
خوب از اینجا به بعدش راحته
2 تا تابع تو در تو مینویسی و هر کلمه ای که داری را در زیر شاخه ی همون نامی که داری قرار میدی...

نکته ی مهم : در این روش که من گفتم چون ممکنه یک کلمه در 2 موقعیت قرار بگیره این روش درست کار نمیکنه
مثال
من خوب هستم
من و علی خوب هستیم

وقتی این با روش من درختی بشه اینجوری میشه :
-من
--و
---علی
--خوب
---هستم
---هستیم
یعنی ساختار فوق را اگه جمله کنیم دوباره اینجوری میشه
من و علی
من خوب هستم
من خوب هستیم
3 تا جمله میشه
یعنی ترتیب رعایت نمیشه دیگه اگه میخوای ترتیب هم رعایت بشه باید حتما حتما برای موقعیت هر کلمه یک نام بگزاری و بر اساس اون نام مرتبشون کنی
راهنمایی : برا این که موقعیت کلمه را در جمله پیدا کنی (چون کاری با فعل و فاعل و.. نداریم) بیا در جمله کلمات را از هم جدا کن و بر اساس جمله شماره بندیشون کن
مثلا در جمله ی "من خوب هستم" خوب کلمه دومه یه اسمی براش بزار مثلا "khob_2" یا هر چی خودت میدونی حالا در یک جمله دیگه اگه دوباره خوب کلمه ی دوم بشه نام هم دوباره میشه "khob_2" بر این اساس مشتراکات را داری میتونی از هم جداشون کنی و همونجوری که میخوای در بیاریشون

نمونه مرتب کردنش را قبلا در انجمن قرار دادم من بگرد میجوری (نیافتی بگو لینک بدم بهت)
ولی برای شما موقعیت کلمه مهمه رو حرفام فکر کن اگه بفهمی چی گفتم راحت میتونی درستش کنی
برای نام گذاری کلمات باید یه تابع بنویسی که تابع نام گذاری کنه (چون جملات نامعلوم هستن) بعد تابع که نام گذاری کرد نسبت به موقعیت کلمه در جمله نام های مشابه هم ساخته خواهند شد که بر اساس اون نام های مشابه جملات را تفکیک میکنی و درستش میکنی دیگه....

دیگه نمیدونم چجوری توضیح بدم و کمکت کنم
(من 2 تا روش بالا را گفتم چون روی جمله مثال زده بودی مجبور شدم روش 2 را بگم که بتونی درست جملات را از هم جدا کنی و دسته بندی کنی ولی شما ببین نسبت به کاری که میخوای انجام بدی چجوریه ممکنه همون روش اول به کارت بیاد)
موفق باشی

samin_panahi
شنبه 12 مرداد 1392, 16:17 عصر
تقریبا الگوریتمش تو ذهنم هست و می دونم باید چکار کنم
اون رشته ای هم که می خوام به صورت درختی نمایش بدم قبلا بر اساس چیزی که می خوام جدا کنم تو آرایه قرار گرفته : array[0,1,2,....]i
همین می شه اسمشون دیگه
ولی مشکلم کار با treeview هست تا حالا باهاش کار نکردم
تازه به زور تونستم یه چیز مثل این رو درست کنم:

http://upload7.ir/images/34458566589813890261.png
ولی نمی دونم چطور:
یه فرزند دیگه به نودی که یه فرزند داره بدم؟
یا نود ها رو بررسی کنم و با یکی از خونه های آرایه مقایسه ش کنم؟

Mahmoud.Afrad
شنبه 12 مرداد 1392, 22:31 عصر
این کد جواب میده. فهمیدنش با خودت

private void AddToTreeView(TreeView treeView, string phrase)
{
if (phrase == null)
{
throw new ArgumentNullException("phrase");
}
string[] words = phrase.Split(' ', '.', '،', ',', '\t', ':', ';');
TreeNode currentNode = null;
bool found = false;
foreach (string word in words)
{
if (!string.IsNullOrWhiteSpace(word))
{
TreeNodeCollection tnCollection = null;
if (currentNode == null)
{
tnCollection = treeView.Nodes;
}
else
{
tnCollection = currentNode.Nodes;
}
foreach (TreeNode tn in tnCollection)
{
if (tn.Text == word)
{
currentNode = tn;
found = true;
break;
}
}
if (!found)
{
TreeNode newNode = new TreeNode(word);
if (currentNode == null)
{
treeView.Nodes.Add(newNode);
}
else
{
currentNode.Nodes.Add(newNode);
}
currentNode = newNode;
}
found = false;
}
}
}

منظور از phrase عبارت یا جمله هست.

samin_panahi
یک شنبه 13 مرداد 1392, 02:01 صبح
خیلی خیلی ممنونم ازتون مشکلم حل شد دستتون درد نکنه