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

نام تاپیک: غیرفعال کردن همزمان پانزده Label

  1. #1

    غیرفعال کردن همزمان پانزده Label

    ســلام دوستان . من میخوام که 15 لیبل رو همزمان غیرفعال کنم ، این کد جواب می ده



    for (int i = 16; i <= 30; i++)
    {
    learlessonfrm.ActiveForm.Controls[" label" + i.ToString()].Enabled = false;
    }




    اما مشکل اینکه اون 15 لیبل خودشون داخل 15 تا کنترل پنل هستند . مثلا" Label16 داخل panel16 هست و ... چه تغییری باید در کد اعمال بشه ؟!

  2. #2

    نقل قول: غیرفعال کردن همزمان پانزده Label

    1.png

    public partial class Form1 : Form
    {
    Label[] lbl = new Label[15];
    Panel[] p = new Panel[15];
    public Form1()
    {
    InitializeComponent();

    }

    private void Create_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    p[i] = new Panel();
    p[i].Location = new System.Drawing.Point(0, i * 50);
    p[i].Size = new System.Drawing.Size(228, 50);
    p[i].BackColor = Color.Gold;
    p[i].Name = "Panel1";
    lbl[i] = new Label();
    lbl[i].AutoSize = true;
    lbl[i].Text = i.ToString();
    p[i].Controls.Add(lbl[i]);
    Controls.Add(p[i]);
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    lbl[i].Enabled = false;
    }
    }

    private void button3_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    lbl[i].Enabled = true;
    }
    }
    }

  3. #3

    نقل قول: غیرفعال کردن همزمان پانزده Label

    نقل قول نوشته شده توسط pouria_bayat مشاهده تاپیک
    1.png

    public partial class Form1 : Form
    {
    Label[] lbl = new Label[15];
    Panel[] p = new Panel[15];
    public Form1()
    {
    InitializeComponent();

    }

    private void Create_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    p[i] = new Panel();
    p[i].Location = new System.Drawing.Point(0, i * 50);
    p[i].Size = new System.Drawing.Size(228, 50);
    p[i].BackColor = Color.Gold;
    p[i].Name = "Panel1";
    lbl[i] = new Label();
    lbl[i].AutoSize = true;
    lbl[i].Text = i.ToString();
    p[i].Controls.Add(lbl[i]);
    Controls.Add(p[i]);
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    lbl[i].Enabled = false;
    }
    }

    private void button3_Click(object sender, EventArgs e)
    {
    for (int i = 0; i < 15; i++)
    {
    lbl[i].Enabled = true;
    }
    }
    }
    خیلی ممنونم . ولی راهی نداره همون کنترل های پنلی که که قبلا ایجاد کردم و داخلشون label گذاشتم رو استفاده کنم ؟ (منظورم اینکه همون کدی رو که خودم گذاشتم ویرایش کنم .)

  4. #4

    نقل قول: غیرفعال کردن همزمان پانزده Label

    چرا اگر داخل Panel فقط همون 15 تا لیبل هست میتونی Enable پنل رو false کنی. یا روش زیر:

    foreach (Control p in panel2.Controls)
    if (p.GetType() == typeof(Label))
    p.Enabled = false;

  5. #5

    نقل قول: غیرفعال کردن همزمان پانزده Label

    نقل قول نوشته شده توسط pouria_bayat مشاهده تاپیک
    چرا اگر داخل Panel فقط همون 15 تا لیبل هست میتونی Enable پنل رو false کنی. راه دیگه ای به ذهن من نمیرسه.
    نه هر لیبل داخل یک پنل هست . یعنی 15 پنل !! به هر حال بازم ممنونم . اگر جواب رو پیدا کردم اینجا می نویسم .

  6. #6
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اسفند 1393
    پست
    85

    نقل قول: غیرفعال کردن همزمان پانزده Label

    نقل قول نوشته شده توسط بیتا حکمت مشاهده تاپیک
    ســلام دوستان . من میخوام که 15 لیبل رو همزمان غیرفعال کنم ، این کد جواب می ده


    for (int i = 16; i <= 30; i++)
    {
    learlessonfrm.ActiveForm.Controls[" label" + i.ToString()].Enabled = false;
    }


    اما مشکل اینکه اون 15 لیبل خودشون داخل 15 تا کنترل پنل هستند . مثلا" Label16 داخل panel16 هست و ... چه تغییری باید در کد اعمال بشه ؟!
    سلام ،

    for (int i = 16; i <= 30; i++)
    {
    ((Label)((Panel)learlessonfrm.ActiveForm.Controls["panel" + i.ToString()]).Controls["label" + i.ToString()]).Enabled = false;
    }
    آخرین ویرایش به وسیله LastAirbender : چهارشنبه 26 فروردین 1394 در 05:28 صبح دلیل: spelling mistake

  7. #7
    کاربر دائمی آواتار Javad_raouf
    تاریخ عضویت
    آذر 1388
    محل زندگی
    مشهد
    پست
    445

    نقل قول: غیرفعال کردن همزمان پانزده Label

    من یک تابع نوشتم که خودم خیلی ازش استفاده می کنم برای شما هم می زارم هم برای این کاری که می خواین به درد می خوره هم شاید به درد بقیه بخوره
    public static bool IsKindOfType(Type Type, Type BaseType)
    {
    Type CounterType = Type;
    while (CounterType != null)
    {
    if (CounterType == BaseType)
    return true;
    CounterType = CounterType.BaseType;
    }
    Type[] allInterfaces = Type.GetInterfaces();
    foreach (Type InType in allInterfaces)
    if (InType == BaseType)
    return true;
    return false;
    }
    public static List<Control> GetAllSubControls(Control Ctl, params Type[] BaseTypes)
    {
    if (BaseTypes == null || BaseTypes.Length == 0)
    BaseTypes = new Type[1];
    for (int i = 0; i < BaseTypes.Length; i++)
    if (BaseTypes[i] == null)
    BaseTypes[i] = typeof(Control);
    List<Control> lstCont = new List<Control>();
    foreach (Control x in Ctl.Controls)
    lstCont.Add(x);
    for (int i = 0; i < lstCont.Count; i++)
    foreach (Control x in lstCont[i].Controls)
    lstCont.Add(x);
    for (int i = lstCont.Count - 1; i >= 0; i--)
    {
    bool blnOk = false;
    foreach (Type BType in BaseTypes)
    if (IsKindOfType(lstCont[i].GetType(), BType))
    {
    blnOk = true;
    break;
    }
    if (!blnOk)
    lstCont.RemoveAt(i);
    }
    return lstCont;
    }


    تابع IsKindOfType رو شما مستقیما احتیاج ندارید بلکه برای کارتون از تابع GetAllSubControls استفاده کنید
    نحوه کارشم اینجوریه:
    مثلا فرض کنید می خواید همه Label های یک فرم رو بارگذاری کنید:
    تابع رو اینحوری باید براخوانی کنید:

    List<Control> lstLable = GetAllSubControls(this, typeof(Label));
    foreach (Control lbl in lstLable)
    lbl.Enabled = false;

    با این کد هر چی label توی فرمتون باشه توی یک لیست قرار می گیره(حتی اگر داخت یک panel یا هر چیز دیگه باشه)
    حالا مثلا فرض کنید می خواید تمام TextBox ها و Button های فرمتون رو برگردانید کافیه تابع رو اینجوری فراخونی کنید:
    List<Control> lstControl = GetAllSubControls(this, typeof(TextBox), typeof(Button));


    ضمنا می تونید به جای this یک پنل رو قرار بدین که در این صورت فقط کنترل های داخل اون پنل بر گردانده می شوند
    امیدوارم بدردتون بخوره
    آخرین ویرایش به وسیله Javad_raouf : چهارشنبه 26 فروردین 1394 در 09:03 صبح دلیل: تصحیح دیگه

تاپیک های مشابه

  1. فعال / غیرفعال کردن همزمان چندین کاربر در ممبرشیپ asp.net
    نوشته شده توسط dorparasti در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: دوشنبه 24 بهمن 1390, 15:21 عصر
  2. غیرفعال کردن TaskManager
    نوشته شده توسط hamhik در بخش برنامه نویسی در 6 VB
    پاسخ: 27
    آخرین پست: یک شنبه 22 دی 1387, 12:08 عصر
  3. وارد کردن همزمان داده ها در لیبل
    نوشته شده توسط AspNet در بخش C#‎‎
    پاسخ: 4
    آخرین پست: چهارشنبه 23 فروردین 1385, 23:48 عصر
  4. غیرفعال کردن
    نوشته شده توسط sunboy در بخش VB.NET
    پاسخ: 4
    آخرین پست: چهارشنبه 16 مهر 1382, 21:52 عصر

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

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