نمایش نتایج 1 تا 18 از 18

نام تاپیک: تبدیل رشته به نام کنترل

  1. #1
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    Question تبدیل رشته به نام کنترل

    سلام یه menuStrip تو فرم اصلیم دارم حالا بعد از صفحه لاگین وبررسی دسرسی میخوام یه تعداد از منوهای اونو غیر فعال کنم
    برای اینکار یه جدول از اسامی منو هایی که این کد کاربری وارد شده نباید به اونها دستری ذاشته باشه رو از بانک اطلاعتی بیرون کشیدم
    حالا تو یه حلقه میخوام بگم ایتم های با این اسم ها رو غیر فعال کن

    foreach (DataRow row in Connection.DataSet().Tables[0].Rows)
    {

    ((Control)row[0].ToString()).Enabled = false;
    }

    قبلا یادمه از یه همچین کدی استفاده میکردم که رشته ها رو تبدیل به نام کنترل میکردم ولی الان خطا میده
    خلاصه اینکه من یه رشته دارم حالا چطور بگم کنترلی که اسمش اینه رو غیر فعل کن
    تو نتم چیزی پیدا نکردم
    مطمعنم که قبلا از یه همچین کدی استفاده کردم تو پروژه های دیگه و لی دقیق یادم نمیاد

    ((control)"string").Enabled......



    Untitled.jpg
    میخوام یه سری از این منو ها ویا زیر منو ها رو غیر فعال کنم
    که لیستی از اسامیشونو دارم چطور این اسامی رو تبدیل کنم به نام این منو ها
    ؟
    آخرین ویرایش به وسیله Mahmoud.Afrad : یک شنبه 18 آذر 1397 در 20:06 عصر

  2. #2

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

    باید ببینید این کنترل ها که می گی داخل کدوم کنترل هستند، مثلا اگر داخل یه کنترل یه اسم menu1 باشند (یعنی این parent شون باشه) میشه این کار رو کرد

    menu1.Controls["some_name"];


    البته اگر این رشته واقعا اسم کنترل باشه، ولی اگر محتوا یا Text اون باشه باید با یه حلقه for توی کنترل ها بگردی و پیداش کنی

  3. #3
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    ممنون از جوابت اما کار نمیده این کد
    نهایتن با راهنمایی های که دوستان نکردن به این نتیجه رسیدم
    کل ایتم های که menuStrip داره رو تو حلقه بزارم و هر بار چک کنم اسم ایتم رو اگه اکی بود غیر فعالش کنم
    که خودم اصلا با این کار موافق نیستم و هزینش زیاده

    بازم ممنون

  4. #4
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

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

    شما میتونید از forech استفاده کنید به این صورت



    foreach (MenuItem item2 in mymenu.Items)
    {
    if(item2.Name="نام منو")
    {
    item2.visable=false;
    }
    }



    تو نوت پد نوشتم خودتون اصلاح کنید.

  5. #5
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    نقل قول نوشته شده توسط رامین مرادی مشاهده تاپیک
    شما میتونید از forech استفاده کنید به این صورت



    foreach (MenuItem item2 in mymenu.Items)
    {
    if(item2.Name="نام منو")
    {
    item2.visable=false;
    }
    }



    تو نوت پد نوشتم خودتون اصلاح کنید.

    سلام ممنون از وقتی که گذاشتی فقط دوتا مورد
    1 اینکه این کد ی که نوشتی فقط منو های اصلی رو میبینه و زیر منو ها رو چک نمیکنه
    2 اینکه با حلقه زیاد موافق نیستم چون هزینه زمانیش زیاده هرچند ظاهرا مجبورم از همین استفاده کنم
    قطعا باید یه راهی باشه که تکست رو تبدیل به نام ایتم کرد و بعد غیر فعالش کرد
    در هر صورت بازم ممنون

  6. #6
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    برای انجامش مجبور شدم این کارو انجام بدم
    هرچند هنوزم با حلقه موافق نیستم

    مینویسم تا بقیه هم استفاده کنن
    اول این متد رو اضافه کردم

    private IEnumerable<ToolStripItem> GetItems(ToolStripItem item)
    {
    if (item is ToolStripMenuItem)
    {
    foreach (ToolStripItem tsi in (item as ToolStripMenuItem).DropDownItems)
    {
    if (tsi is ToolStripMenuItem)
    {
    if ((tsi as ToolStripMenuItem).HasDropDownItems)
    {
    foreach (ToolStripItem subItem in GetItems((tsi as ToolStripMenuItem)))
    yield return subItem;
    }
    yield return (tsi as ToolStripMenuItem);
    }
    else if (tsi is ToolStripSeparator)
    {
    yield return (tsi as ToolStripSeparator);
    }
    }
    }
    else if (item is ToolStripSeparator)
    {
    yield return (item as ToolStripSeparator);
    }
    }


    بعد تو لود فرمم
    اینو نوشتم

    //این یه کلاسه که خودم نوشتم وشما باید به هر روشی که میدونید لیست منوهای که نباید دسترسی داشته باشن رو بیرون بکشید
    Connection.connect("SELECT_NOT_DASRESI", public_variabel.par = new string[] { "@_username" }, public_variabel.obj = new object[] { Parametr_pas.get_username() }, 1, true, false);

    List<ToolStripItem> allItems = new List<ToolStripItem>();
    foreach (ToolStripItem toolItem in menuStrip1.Items)
    {
    allItems.Add(toolItem);
    //add sub items
    allItems.AddRange(GetItems(toolItem));
    }
    foreach (DataRow row in Connection.DataSet().Tables[0].Rows)

    foreach (ToolStripItem toolItem in allItems)
    {
    if (toolItem.Name == row[0].ToString())
    toolItem.Enabled = false;
    }


    اما اگه کسی از دوستان میتونه کمک کنه از همون روش که اول گفتم این کار انجام بشه خیلی خیلی بهتره

    foreach (DataRow row in Connection.DataSet().Tables[0].Rows)
    {

    ((Control)row[0].ToString()).Enabled = false;
    }





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

  7. #7
    کاربر دائمی آواتار shahryari
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    آذربايجان
    سن
    40
    پست
    1,234

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

    سلام
               Button btn = (Button)this.Controls["button5"];
    btn.Enabled = false;


    this.Controls["button5"].Enabled= false;

  8. #8

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

    نقل قول نوشته شده توسط svhasvha مشاهده تاپیک
    اما اگه کسی از دوستان میتونه کمک کنه از همون روش که اول گفتم این کار انجام بشه خیلی خیلی بهتره

    foreach (DataRow row in Connection.DataSet().Tables[0].Rows)
    {

    ((Control)row[0].ToString()).Enabled = false;
    }





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

    مطمئن باش اینجور چیزی اصلا وجود نداره!!!

  9. #9
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    نقل قول نوشته شده توسط shahryari مشاهده تاپیک
    سلام
               Button btn = (Button)this.Controls["button5"];
    btn.Enabled = false;


    this.Controls["button5"].Enabled= false;
    ممنون از راهنماییت

    l

  10. #10
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    نقل قول نوشته شده توسط mrbm_2007 مشاهده تاپیک
    مطمئن باش اینجور چیزی اصلا وجود نداره!!!
    سلام مطمئن باش یه همچین چیزی وجود داره چون خودم قبلا ازش استفاده کردم ولی نگارشش یادم رفته
    درهر صورت ممنون

  11. #11
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    ایران
    پست
    372

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

    یک مثال برای تکست باکس
    List<string> list1 = new List<string>();

    list1.Add("textBox1");
    list1.Add("textBox2");
    list1.Add("textBox3");
    list1.Add("textBox4");

    foreach (string txt in list1)
    {
    TextBox tbx = this.Controls.Find(txt, true).FirstOrDefault() as TextBox;
    if (tbx != null)
    tbx.Enabled = false;

    }


    برای منو

    List<string> list1 = new List<string>();

    list1.Add("item1");
    list1.Add("item2");
    list1.Add("item3");
    list1.Add("item4");

    foreach (string txt in list1)
    {
    ToolStripMenuItem items = menuStrip1.Items.Find(txt, true).FirstOrDefault() as ToolStripMenuItem;
    if (items != null)
    items.Enabled = false;
    }



    «دوچیز بی‌پایان است: اول «کهکشان»، دوم «حماقت بشر»، در مورد اول زیاد مطمئن نیستم.»
    آخرین ویرایش به وسیله 336699 : سه شنبه 20 آذر 1397 در 13:21 عصر

  12. #12

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

    البته با روش بازگشتی یا recursive هم قابل انجامه، یه متد مینویسی که یه پارامتر ورودی از نوع toolstripmenu یا آیتمش میگیره حالا داخل متد باید به ازای هر فرزندی که این منو داره دوباره متد رو با پارامتر فرزند این منو فراخوانی کنی و در هر فراخوانی عملیات چک کردن اسم آیتم و غیرفعال کردنشون رو انجام میدی

  13. #13

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

    نقل قول نوشته شده توسط svhasvha مشاهده تاپیک
    سلام مطمئن باش یه همچین چیزی وجود داره چون خودم قبلا ازش استفاده کردم ولی نگارشش یادم رفته
    درهر صورت ممنون
    باشه، شاید شما تجربه بیشتری توی #C داری، یادت اومد اینجا بذار!
    ولی من با تجربه 10 ساله خودم میگم اینجور چیزی وجود نداره که استرینگ رو به کنترل کست کنه!

  14. #14
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    نقل قول نوشته شده توسط mrbm_2007 مشاهده تاپیک
    باشه، شاید شما تجربه بیشتری توی #C داری، یادت اومد اینجا بذار!
    ولی من با تجربه 10 ساله خودم میگم اینجور چیزی وجود نداره که استرینگ رو به کنترل کست کنه!
    دوستم گلماول اینکه ما جسارت نکردیم
    دوم اینکه ممنون از وقتو پیگیریت
    یه چیزایی یادم اومد که میزام
    حالا شما لطف کنید ببینید چطور اینو تامیم بدیم به ایتم های menuStrip
     Control ctn = this.Controls["label1"];
    ctn.BackColor = Color.Red;

    دقیقا می خوام همین اتفاق برای ایتم های منو بیفته
    من یه لیست از اسامی ایتم ها دارم حالا بدون استفاده از هیچ حلقه ای و جستجویی میخوام مستقیم بگم ایتمی که اسمش اینه رو غیر فعال کن!!!

  15. #15
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    سلام ممنون از راهنماییت جوابتون کاملا درست و قابل انجامه اما مشکل اینجاست نمی خوام چیزی رو چک کنم و نه حلقه استفاده کنم
    من میخوام با استفاده از اسمی که از ایتم دارم مستقیم اونو صدا کنم و....
    سادش این که اسم ایتم رو دارم حالا میخوام بگم ایتمی که اسمش اینه مثلا غیر فعال بشه یا تکستش این بشه یا........

  16. #16

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

    نقل قول نوشته شده توسط svhasvha مشاهده تاپیک
    سلام ممنون از راهنماییت جوابتون کاملا درست و قابل انجامه اما مشکل اینجاست نمی خوام چیزی رو چک کنم و نه حلقه استفاده کنم
    من میخوام با استفاده از اسمی که از ایتم دارم مستقیم اونو صدا کنم و....
    سادش این که اسم ایتم رو دارم حالا میخوام بگم ایتمی که اسمش اینه مثلا غیر فعال بشه یا تکستش این بشه یا........
    مجبور به جستجو هستید. برای منو چون دارای زیرمنو هست از یک متد بازگشتی استفاده کنید.

  17. #17
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

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

    به نظرم مجبور نباشم!! چون مستقیم میتونم ایتم هار صدا کنم !!!
    یعنی مستقیم میتونم اسم زیر منور وصدا کنم وغیر فعالش کنم

  18. #18
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

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

    نقل قول نوشته شده توسط svhasvha مشاهده تاپیک
    سلام ممنون از وقتی که گذاشتی فقط دوتا مورد
    1 اینکه این کد ی که نوشتی فقط منو های اصلی رو میبینه و زیر منو ها رو چک نمیکنه
    2 اینکه با حلقه زیاد موافق نیستم چون هزینه زمانیش زیاده هرچند ظاهرا مجبورم از همین استفاده کنم
    قطعا باید یه راهی باشه که تکست رو تبدیل به نام ایتم کرد و بعد غیر فعالش کرد
    در هر صورت بازم ممنون
    برا زیر منو ها حلقه های داخلی ایجاد کنید. من برا خوانایی بیشتر یک حلقه نوشتم.
    مگه چندتا منو دارید؟ من خودم فعلا و در حال حاضر 182 تا منو و زیر منو دارم که تا سه سطح هستند. با خیال راحت میتونم بگم کمتر از یک ثانیه این عملیات مخفی کردن منو انجام میشه. کاربر این موردو اصلا متوجه نمیشه. امتحان کنید ببینید چقدر ملموسه این مورد که دنبال جایگزین روش دیگه ای هستید.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •