PDA

View Full Version : سوال: ریختن فولدرهای داخل یک فولدر درون ContextMenuStrip



forodo
سه شنبه 24 دی 1392, 17:30 عصر
سلام و خسته نباشید خدمت دوستان برنامه نویس
توی این عکس:
115369
من می خوام روی هر سطر که راست کلیک می کنم فولدرهایی که توی اون مسیر قرار داره توی راست کلیک لیست بشه.
طوری لیست بشه که فولدرهای داخل فولدر اولیه لیست بشه بعد اگه داخل اون فولدرها باز فولدری بود جلوی خودش دوباره لیست بشه.
چه فولدر تو فولدری شد:متعجب:
اینو به صورت دستی نوشتم. می خوام اینجوری بشه. بعد روی هرکدوم که کلیک کردم فایلهای داخل اون فولدر در گریدویوی دیگه ای لیست بشه.
115370
با تشکر

shahryari
چهارشنبه 25 دی 1392, 09:49 صبح
سلام
ادرس پوشه اصلی را بعنوان پارامتر ورودی بهش بده:

private void setContextMenu(string path)
{
contextMenuStrip1.Items.Clear();
foreach (string item in System.IO.Directory.GetDirectories (path ))
{
contextMenuStrip1.Items.Add (System.IO.Path.GetFileName (item ));
}
}

و بهتره در رویداد موس کلیک دیتا گرید مقدار دهی بشه
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
setContextMenu(dataGridView1.CurrentRow.Cells ["Column2"].Value .ToString ();
}
}

forodo
چهارشنبه 25 دی 1392, 11:52 صبح
ممنون که پاسخ دادید.
ولی اینطوری نمی خوام. اینطوری فقط فولدرهای یک لول بعدتر لیست می شه البته می دونم که با alldirectory می شه همه رو لیست کرد.
فرض کنید من فولدرهای داخل مسیرم به این شکله.
داخل فولدرمسیر:
داخل فولدر 1: فولدر 1-1 فولدر1-2 فولدر 1-3
داخل فولدر 2: فولدر 2-1 فولدر 2-2
داخل فولدر 3: فولدر 3-1 فولدر 3-2 فولدر 3-3 فولدر 3-4
می خوام وقتی راست کلیک می کنم توی راست کلیک به من اینطوری نشون بده:
115409
115410
115411
یعنی خودش تشخیص بده که مثلاً فولدر 2-1 رو باید در زیرمجموعه فولدر 2 بندازه

Mahmoud.Afrad
یک شنبه 29 دی 1392, 12:46 عصر
یک مقدار سعی کنید تا به هدف برسید.



private void GetFolders(string path, [Optional] ToolStripMenuItem item)
{
DirectoryInfo dir = new DirectoryInfo(path);
if (item == null)
{
contextMenuStrip1.Items.Clear();
}
else
{
item.DropDownItems.Clear();
}
DirectoryInfo[] subDirs = null;
try
{
subDirs = dir.GetDirectories();
}
catch (Exception)
{
return;
}
foreach (DirectoryInfo subDir in subDirs)
{
ToolStripMenuItem subItem = new ToolStripMenuItem(subDir.Name);
subItem.Tag = subDir.FullName;
if (item == null)
{
contextMenuStrip1.Items.Add(subItem);
}
else
{
item.DropDownItems.Add(subItem);
}
subItem.MouseEnter += new EventHandler(items_MouseEnter);
}
}

void items_MouseEnter(object sender, EventArgs e)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
GetFolders(item.Tag.ToString(), item);
}


نحوه استفاده:

string path = @"c:\";
GetFolders(path);

forodo
یک شنبه 29 دی 1392, 13:14 عصر
خیلی خیلی ممنون.
درست شد.
فقط یه مشکل دارم که برم پیداش کنم.
مسیر اون زیرمنویی که رفتم جلو و انتخابش کردم رو پیدا کنم.

Mahmoud.Afrad
یک شنبه 29 دی 1392, 14:54 عصر
اگر دقت کنی مسیر رو در خصوصیت tag قرار دادم. میتونی استفاده کنی.
رویداد click را برای subItem هندل کن:

...
subItem.MouseEnter += new EventHandler(items_MouseEnter);
subItem.Click += new EventHandler(subItem_Click);
}
}

void subItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
string path = item.Tag.ToString();
MessageBox.Show(path);
}

forodo
یک شنبه 29 دی 1392, 21:52 عصر
بله با F10 رفتم جلو ببینم کدا چیه و متوجه شدم که توی تگ آدرس کامل هستش.
الان دارم دنبال یه رویداد برای contextmenustrip می گردم که وقتی روی زیرمنوها کلیک کردم فایلهای داخل اون رو بدست بیارم و توی ردگریدویو بریزم.
کلیک رو که انتخاب می کنم فقط روی منو کار می کنه و روی زیرمنوها کار نمی کنه.

یه لطفی هم بکنید یه تاپیکی یا لینکی بدید که در مورد کدای زیر توضیح داده باشه که چیه! من اصلاً نمی دونم چی سرچ کنم.

void subItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
string path = item.Tag.ToString();
MessageBox.Show(path);
}



subItem.MouseEnter += new EventHandler(items_MouseEnter);
subItem.Click += new EventHandler(subItem_Click);