کنترل TreeView
کنترل treeView برای نمایش درختی آیتمها به کار میرود. برای درک بهتر عملکرد این کنترل میتوان به فهرست مطالب یک کتاب و یا نمایش فایلها و یا پوشههای درون هارد اشاره کرد. هر آتیم در این کنترل شامل یک برچسب و یک عکس اختیاری است و هر آیتم خود میتواند شامل زیر آیتمهای دیگر باشد. با کلیک بر روی علامت + یا – کنار هر آیتم، کاربر میتواند زیر آیتمهای مربوطه را مشاهده کند. در شکل زیر یک کنترل treeview ساده با چند آیتم نمایش داده شده است. همانطور که مشاهده میکنید آیتم Root آیتم یا گره اصلی است که دارای دو زیر آیتم به نامهای NodeA و NodeB میباشد. NodeA نیز به نوبه خود دارای دو زیر آیتم به نامهای ChildA و ChildB است.
بعد از ایجاد treeView میتوان هر یک از آیتمهای آن را دستکاری کرد (حذف، اضافه، ویرایش و مرتب کرد). در زیر به برخی از خاصیتها، متدها و رویدادهای مهم این کنترل اشاره شده است :
خاصیت | توضیح | |
CheckBox | یک جعبه تیک یا چک باکس در کنار هر گره نمایش میدهد. | |
ItemHeight | ارتفاع گرههای کنترل را مشخص میکند. | |
LabelEdit | مشخص میکند که آیا متن گرهها قابل ویرایش باشد یا نه؟ | |
LineColor | رنگ خطی که به گرهها متصل است را مشخص میکند. | |
Nodes | مجموعهای از گرههای کنترل را بر میگرداند. | |
Scrollable | مشخص میکند که آیا کنترل دارای اسکرول باشد یا نه؟ | |
SelectedImageIndex | مقدار اندیس عکسی که قرار است هنگام انتخاب گره، در کنار گره نمایش داده شود، را نمایش میدهد. | |
SelectedNode | گره جاری انتخاب شده در کنترل را مشخص میکند. | |
ShowLines | مشخص میکند که آیا خط ارتباط دهنده بین گرهها، نمایش داده شود یا خیر؟ | |
ShowNodeToolTips | مشخص میکند که آیا هنگام مکث ماوس بر روی گرهها متنی نمایش داده شود یا نه؟ | |
ShowPlusMinus | مشخص میکند که آیا علائم + و منفی در کنار گرهها نمایش داده شوند یا نه؟ | |
ShowRootLines | مشخص میکند که آیا خط زیر گره اصلی، نمایش داده شود یا خیر؟ | |
Sorted | مشخص میکند که آیا گرهها در داخل کنترل مرتب نمایش داده شوند یا نه؟ | |
TreeViewNodeSorter | با پیاده سازی اینترفیس IComparer اجازه میدهد که گرهها را به صورت سفارشی مرتب سازی کنید. |
متد | توضیح | |
CollapseAll | همه گرههای باز شده را جمع میکند. | |
ExpandAll | همه گرههای بسته شده را باز میکند. | |
GetNodeCount | تعداد تمامی گرهها و زیر گرههای کنترل را بر میگرداند. |
رویداد | توضیح | |
AfterCheck | بعد از تیک خوردن جعبه کنار گره، روی میدهد. | |
AfterCollapse | بعد از بسته شدن گرهها، روی میدهد. | |
AfterExpand | بعد از باز شدن گرهها روی میدهد. | |
AfterLabelEdit | بعد از ویرایش متن گرهها روی میدهد. | |
AfterSelect | بعد از انتخاب یک گره روی میدهد. | |
BeforeCheck | قبل از تیک حوردن یک گره روی میدهد. | |
BeforeCollapse | قبل از بسته شدن یگ گره روی میدهد. | |
BeforeExpand | قبل از باز شدن یک گره روی میدهد. | |
BeforeLabelEdit | قبل از ویرایش متن یک گره روی میدهد. | |
BeforeSelect | قبل از انتخاب یک گره روی میدهد. | |
NodeMouseClick | وقتی روی میدهد که بر روی یک گره کلیک شود. | |
NodeMouseDoubleClick | وقتی روی میدهد که بر روی یک گره دو بار کلیک شود. | |
NodeMouseHover | وقتی روی میدهد که با ماوس بر روی یک گره برویم. |
برای اضافه کردن آیتم یا گره به یک کنترل treeView میتوان به دو روش عمل کرد :
- استفاده از پنجره Properties
- استفاده از کدنویسی
ابتدا روش اول را توضیح میدهیم. یک کنترل treeView بر روی فرم قرار داده و آن را در حالت انتخاب قرار دهید. سپس در پنجره Properties بر روی دکمهای که در خاصیت Nodes قرار دارد کلیک کنید. بعد از کلیک، پنجرهای به صورت زیر باز میشود که شما میتوانید با استفاده از آن، گرههای لازم را به کنترل treeView اضافه کنید. فرض کنید میخواهیم گرههای شکل بالا را ایجاد کنیم. ابتدا به صورت زیر گره اصلی (Root) را ایجاد و نام گذاری میکنیم :
بعد از ایجاد گره اصلی، برای اضافه کردن دو زیر گره ابتدا بر روی گره اصلی کلیک کرده و سپس دو بار کلیک بر روی دکمه add Child دو زیر گره به آن اضافه میکنیم :
برای اضافه کردن یک زیر گره به گره جدید ایجاد شده هم ابتدا بر روی آن کلیک کرده و سپس دکمه add Child را میزنیم.
به این نکته توجه کنید که برای اضافه کردن یک زیر گره، حتماً باید گرهای که قرار است یک زیر گره به آن اضافه شود در حالت انتخاب باشد. برای حذف گرههای اضافی و ناخواسته و همچنین جابه جایی گرهها از دکمههای زیر استفاده میشود :
برای اینکه در کنار هر گره یک جعبه متن قرار دهیم میتوانیم از خاصیت CheckBoxes در پنجره Properties استفاده کرده و مقدار آن را برابر True قرار دهیم:
اگر بخواهیم یک عکس به گرهها اختصاص دهیم، ابتدا باید یک کنترل imageList بر روی فرم بکشیم و سپس با استفاده از خاصیت Image این کنترل عکسی را که میخواهیم انتخاب کنیم :
در مرحله بعد بر روی کنترل treeView کلیک کرده و از خاصیت ImageList آن را بر روی نام کنترل imageList اضافه شده به فرم قرار میدهیم تا عکس به گرهها اضافه شود :
حال همین مراحل بالا را میخواهیم با استفاده از روش کدنویسی انجام دهیم. یک برنامه ویندوزی ایجاد کرده و یک کنترل treeView بر روی فرم قرار دهید. سپس مثلاً بر روی فرم دو بار کلیک کرده و کد زیر را بنویسید :
treeView1.Nodes.Add("Root");
با اجرای برنامه مشاهده میکنید که گره اصلی به فرم اضافه شده است :
برای اضافه کرده دو زیر گره به این گره اصلی هم به صورت زیر عمل میکنید :
treeView1.Nodes[0].Nodes.Add("NodeA"); treeView1.Nodes[0].Nodes.Add("NodeB");
عدد صفر در کد بالا، اندیس گره اصلی (Root) است :
و برای اضافه کردن زیر گره به گره NodeA به صورت زیر عمل میکنیم :
treeView1.Nodes[0].Nodes[0].Nodes.Add("ChildA"); treeView1.Nodes[0].Nodes[0].Nodes.Add("ChildB");
همانطور که در کد بالا مشاهده میکنید اولین صفر نشان دهنده اندیس گره Root و دومین صفر نشان دهنده اولین زیر گره آن یعنی NodeA است:
از کدهای بالا نتیجه میگیریم که برای اضافه کردن یک زیر گره، به گره NodeB، باید به جای عدد 0، عدد 1 قرار دهیم :
treeView1.Nodes[0].Nodes[1].Nodes.Add("ChildA");
در کل کدهای زیر گرههای شکل بالا را به وجود میآورند :
using System.Windows.Forms; namespace TreeView { public partial class Form1 : Form { public Form1() { InitializeComponent(); //گره اصلی treeView1.Nodes.Add("Root"); //اولین زیر گره، گره اصلی و زیر گرههای آن treeView1.Nodes[0].Nodes.Add("NodeA"); treeView1.Nodes[0].Nodes[0].Nodes.Add("ChildA"); treeView1.Nodes[0].Nodes[0].Nodes.Add("ChildB"); //دومین زیر گره، گره اصلی و زیر گرههای آن treeView1.Nodes[0].Nodes.Add("NodeB"); treeView1.Nodes[0].Nodes[1].Nodes.Add("ChildA"); } } }
برای حذف یک گره هم میتوانیم از متد ()Remove استفاده کنیم. مثلاً اگر بخواهیم گره NodeA را حذف کنیم، به صورت زیر عمل مینماییم :
treeView1.Nodes[0].Nodes[0].Remove();
همانطور که مشاهده میکنید اندیس گره را به صورت بالا نوشته و بعد متد ()Remove را فراخوانی میکنیم. به این نکته توجه کنید که، با حذف یک گره مادر، تمام زیر گرههای آن هم حذف میشوند :
مطمئناً تاکنون متوجه شدهاید که برای حذف مثلاً زیر گره ChildA باید به صورت زیر، سلسه مراتب وراثتی آن را رعایت کنیم :
treeView1.Nodes[0].Nodes[0].Nodes[0].Remove();
در کد بالا به ترتیب از چپ به راست، صفر اول اندیس گره Root، صفر دوم اندیس گره NodeA و صفر آخر هم اندیس ChildA است :
سلام.
چرا توی قسمت کد نویسی وقتی قسمت name space رو تغییر میدم خطا میده و یه قسمت دیگه باز میکنه که شبیه همون قسمت کدنویسی هست من حتی آپدیت هم کردم اما ربطی نداره
سلام، کلا متوجه نشدم که چه مشکلی دارین. ممنون میشم به طور کامل تو بخش پرسش و پاسخ مطرح بفرمایید
w3-farsi.com/forum
سلام وخسته نباشید، امیدوارم موفق باشید،درمورد emgu cv و serial port هم مطلب بزارید.
سلام، ممنون از نظراتتون، چشم
سلام ممنونم…خیلی خوب و قابل فهم بود…با نظر vb341 کاملا موافقم
سلام . در صورت امکان یک مثال برای treeview در حالتی که اطلاعات ر و از بانک اطلاعاتی بخونه قرار بدین