PDA

View Full Version : رفع مشکل کندی کار با treeview



djscsi
شنبه 21 اسفند 1389, 12:20 عصر
دوستان من مشکلی در کار با treeview دارم .
ببینید من قراره تمام درایوهای سیستمم رو به عنوان node اصلی و تمام پوشههای اون رو به زیر node زیر مجموعه اون نشون بدم (یعنی روی علامت + کنارش کلیک میکنید کل فوولدرهای داخل درایو رو نشون میده رو همچنین رو علامت + کنار فولدرها کلید بشه فولدرهای داخل اون نشون داده میشه و به همین ترتیب)
برای انجامش مشکلی ندارم و از یه تابع بازگشتی استفاده کردم اما مشکل کندی اونه
برای حل این مشکل چه کار کنم؟
ممنون

Reza_Yarahmadi
شنبه 21 اسفند 1389, 16:31 عصر
دوست عزیز روشی که برای پر کردن درخت استفاده میکنید مشکل داره. معمولا تمام اطلاعات لود نمیشه (تمام نودها به درخت اضافه نمیشه). روش متداول برای نمایش اطلاعات به این صورته که ابتدا فقط نودهای اصلی به درخت اضافه میشه و توی رویداد AfterSelect تمام زیرمجموعه های مستقیم نود انتخاب شده به درخت(به نود انتخاب شده) اضافه میشه. توی این روش چون همیشه حجم کمی از اطلاعات واکشی میشه سرعت کار بالاست (این روشی است که اکثر نرم افزارها ازش استفاده میکنند)

djscsi
دوشنبه 23 اسفند 1389, 07:06 صبح
پس بقیه نرم افزارها از کجا لیست تمام فولدرها رو به محض اجراشون لیست میکنند و تو treeview نشون میدن؟

ببینید منم این کارو کردم
اول تو form load اینو نوشتم :

foreach (DriveInfo drv in drives)
{
TreeNode node = new TreeNode(drv.Name);
treeView1.Nodes.Add(node);
}
بعد
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
Cursor = Cursors.WaitCursor;
FillDirectory(e.Node.FullPath, e.Node);
Cursor = Cursors.Default;
}
تابع FillDirectory همون تابع بازگشتی هست که لیست تمام فولدرهای داخل اون درایو رو به نود مربوطه(نودی که اسم درایوه) اضافه میکنه

Hossenbor
دوشنبه 23 اسفند 1389, 08:24 صبح
سلام دوست عزیز بقیه این کارو نمی کنند چون مشکل سرعتو و سنگینی برنامه ایجاد میشه شما از روش دوستمون استفاده کن اگر بازم مشکل پیدا کردی از متد invoke استفاده کن که مشکل هنگ هم نداشته باشی

Reza_Yarahmadi
دوشنبه 23 اسفند 1389, 17:08 عصر
پس بقیه نرم افزارها از کجا لیست تمام فولدرها رو به محض اجراشون لیست میکنند و تو treeview نشون میدن؟
نرم افزارهای دیگه هم تمام فولدرها رو یکجا لود نمیکنند. نیازی به استفاه از تابع بازگشتی و چیز دیگه ای نیست.
به نمونه ساده زیر توجه کنید

Parham.D
سه شنبه 08 شهریور 1390, 08:07 صبح
مشکل کندی برای من زمانی اتفاق می افته که میخوام بین درایوهایی که در سیستم وجود داره یک درایو خاص را انتخاب کنم برای نمایش زیر فلدرهای آن. لطفا به کد زیر توجه کنید:








foreach (DriveInfo EachDrive in DriveInfo.GetDrives())
if (EachDrive.DriveType == DriveType.Removable && EachDrive.IsReady)
{
removableVolumeLable = EachDrive.VolumeLabel;
removablePath = EachDrive.Name;
removableRoot = EachDrive.Name;
}



وقتی کد بالا را اجرا میکنم تا زمانی که به طور کامل یکی یکی درایوها را بر اساس شرطی که گذاشتم بررسی نکنه فرم نمایش داده نمیشه. این کدها باید در Form_Load گذاشته بشن. دوستان نظری دارند؟