PDA

View Full Version : سوال: دسترسی به text زیر منو



Sal_64
سه شنبه 08 بهمن 1387, 19:20 عصر
سلام

چطور امکان داره به text مسیر زیر منو انتخاب شده دسترسی پیدا کرد



مثلا چیزی شبیه به این

File/New/Project



و چطور امکان داره برای تمام زیر منوها (شبیه برگها در درخت) به وسیله کد دسترسی داشت و حتی ایونت click تعریف کرد؟


با تشکر :قلب:

farzin.fz
سه شنبه 08 بهمن 1387, 22:50 عصر
فرض می کنیم که چندین تول استریپ منو آیتم به ترتیب از A تا F داریم به طوریکه اولین منو آیتم A است .
کد زیر را در ایونت کلیک یکی از منو آیتم ها می نویسیم :


StringBuilder sb = new StringBuilder();
ToolStripItem ti = (ToolStripItem)sender;
ToolStripItem tti = ti.OwnerItem;
sb.Append(ti.Text.ToString());
while (tti.Text!="a")
{
sb.Append("\\" + tti.Text.ToString());
tti = tti.OwnerItem;
}
sb.Append("\\" + tti.Text.ToString());
string address =sb.ToString();
char[] c = address.ToCharArray();
address = "";
int counter=c.Length;
while (counter > 0)
{
address += c[counter - 1].ToString();
counter = counter - 1;
}
this.Text = address.ToString();


خروجی برنامه را در جای عنوان فرم خواهید دید .

Sal_64
پنج شنبه 10 بهمن 1387, 11:47 صبح
سلام

تشکر

اما اگه تعداد منوهای موجود در یک منواستریپ بسیاز زیاد باشه
اونوقت چی
راه حل کلی تر وجود نداره؟
مثلا بشه به جای شرط text شرط دیگه ای رو چک کرد
مثل وجود یا عدم وجود owner یا owneritem


با تشکر

h.jaza
پنج شنبه 10 بهمن 1387, 11:59 صبح
چطور امکان داره به text مسیر زیر منو انتخاب شده دسترسی پیدا کرد
مثلا چیزی شبیه به این

File/New/Project
و چطور امکان داره برای تمام زیر منوها (شبیه برگها در درخت) به وسیله کد دسترسی داشت و حتی ایونت click تعریف کرد؟
هر toolstripMenuItem رویداد Click رو داره که به سادگی میشه ازش استفاده کرد و برای تعداد بالا هم میشه یکی رو پیاده سازی کرد و باقی رو بهش reference داد.

odiseh
پنج شنبه 10 بهمن 1387, 17:12 عصر
با تشكر از شما

Sal_64
پنج شنبه 10 بهمن 1387, 19:28 عصر
سلام

تشکر


هر toolstripMenuItem رویداد Click رو داره که به سادگی میشه ازش استفاده کرد و برای تعداد بالا هم میشه یکی رو پیاده سازی کرد و باقی رو بهش reference داد.مطلب فوق در جواب کدوم سوال؟


باقی رو بهش reference دادمیشه بیشتر توضیح بدید به چه شکل؟


با تشکر

h.jaza
پنج شنبه 10 بهمن 1387, 22:35 عصر
1.

مطلب فوق در جواب کدوم سوال؟
جواب:

و چطور امکان داره برای تمام زیر منوها (شبیه برگها در درخت) به وسیله کد دسترسی داشت و حتی ایونت click تعریف کرد؟

2.

میشه بیشتر توضیح بدید به چه شکل؟
منظورم انتخاب رویداد نوشته شده برای رویداد های دیگس از طریق properties کنترل مربوطه به عنوان مثال:

http://barnamenevis.org/forum/picture.php?albumid=103&pictureid=217

3.

با تشكر از شما

ادیسه جان از شما که کاربر با سابقه ای هستین این off-topic زدن بعیده.
به جای نوشتن تشکر، دکمه ی تشکر رو بزنید.

Sajjad.Aghapour
پنج شنبه 10 بهمن 1387, 23:41 عصر
میشه بیشتر توضیح بدید به چه شکل؟

همون طور که کدها رو می بینید دو قطعه کد زیر تابع رو کلی می کنه .....


ToolStripItem ti = (ToolStripItem) sender;
ToolStripItem tti = ti.OwnerItem;

Sal_64
جمعه 11 بهمن 1387, 11:24 صبح
سلام

با تشکر از همه دوستان

اما هنوز چیزی دستگیرم نشد

لطفا به همون سوال اول پاسخ بدید

کدی که در پست دوم توسط جناب farzin.fz گذاشته شده رو ممکنه به شکلی تغییر بدید که کلی تر بشه و اون شرط text رو به صورتی تغییر بدید که وابستگی به text از بین بره؟

با تشکر

Sal_64
شنبه 12 بهمن 1387, 23:11 عصر
سلام

دوستان می تونن بیشتر راهنمایی کنن :قلب:

با تشکر

smt_414
دوشنبه 21 بهمن 1387, 21:20 عصر
سلام


کدی که در پست دوم توسط جناب farzin.fz گذاشته شده رو ممکنه به شکلی تغییر بدید که کلی تر بشه و اون شرط text رو به صورتی تغییر بدید که وابستگی به text از بین بره؟


هر toolstripMenuItem رویداد Click رو داره که به سادگی میشه ازش استفاده کرد و برای تعداد بالا هم میشه یکی رو پیاده سازی کرد و باقی رو بهش reference داد

در رویداد click مربرط به هر زیر منو شما تابع رو فراخوانی کنید

در رویداد click

ToolStripItem ti = (ToolStripItem)sender;
show_kind_report(ti);

تابع

void show_kind_report(ToolStripItem ti)
{
string mn_name = "";
ToolStripMenuItem tti = (ToolStripMenuItem)ti;

mn_name += tti.Text + "/";
while (tti.OwnerItem != null)
{
tti = (ToolStripMenuItem)tti.OwnerItem;
mn_name += tti.Text + "/";
}
string[] frt = mn_name.Split('/');
mn_name = "";

for (int i = frt.Length - 1; i >= 0; i--)
{
mn_name += frt[i] + " ";
}

MessageBox.Show(mn_name);
}

مسیر رو به صورت انتها به ابتدا بدست میاره
که در انتها تابع اون رو برعکس میکنه و به شکل صحیح نمایش میده


موفق باشید