منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
get label texts of all checked checkbox in user control inside flowlayoutpanel - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : get label texts of all checked checkbox in user control inside flowlayoutpanel (/showthread.php?tid=36861)



get label texts of all checked checkbox in user control inside flowlayoutpanel - Rabeea Qbaha - 07-11-20

السلام عليكم
أنا أعمل على نظام Restaurant POS ، لقد أنشأت نموذجًا لإظهار جميع الإضافات التي يمكن للمستخدمين طلب إضافتها إلى الطلبات ، وهنا النموذج:

داخل هذا النموذج ، أضفت flowlayoutpanel ويوجد داخلها عدة usercontrols  ، كل usercontrol  به PictureBox و Label و CheckBox. أقوم بأضافة الـ usercontrol في flowlayoutpanel  بهذة الطريقة:

PHP كود :
flowLayoutPanel2.Controls.Clear();
 
           DB_conn.Query2("get_food_extras");
 
           DB_conn._dr DB_conn._cmd.ExecuteReader();
 
           while (DB_conn._dr.Read())
 
           {
 
               Extra_uc UC = new Extra_uc
                
{
 
                   Extras_ID DB_conn._dr["ID"].ToString(),
 
                   Extras_Price Convert.ToDecimal(DB_conn._dr["price"].ToString()),
 
                   Extras_name DB_conn._dr["name"].ToString()
 
               };
 
               if (DB_conn._dr["image"] != DBNull.Value)
 
               {
 
                   byte[] image = (byte[])DB_conn._dr["image"];
 
                   image Decompress(image);
 
                   var stream = new MemoryStream();
 
                   stream.Write(image0image.Length);
 
                   var bitmap = new Bitmap(stream);
 
                   UC.Extras_image bitmap;
 
               }
 
               UC.CheckBox1.CheckedChanged += UC_PictureBox1_Click;
 
               UC.MaterialImage.Click += UC_PictureBox1_Click;
 
               UC.Material_name_txt.Click += UC_PictureBox1_Click;
 
               UC.MaterialImage.MouseDown += UC_PictureBox1_MouseDown;
 
               UC.Material_name_txt.MouseDown += UC_PictureBox1_MouseDown;
 
               UC.MaterialImage.MouseMove += UC_PictureBox1_MouseMove;
 
               UC.Material_name_txt.MouseMove += UC_PictureBox1_MouseMove;
 
               flowLayoutPanel2.Controls.Add(UC);
 
           }

 
           DB_conn._dr.Close(); 
بهذة الطريقة استطيع جلب النص لـ label الذي تم الضغط علية :
PHP كود :
private void UC_PictureBox1_Click(object senderEventArgs e)
 
   {
 
       if (!Food_Moved)
 
       {
 
           string Extra_Name "";
 
           CheckState checkd CheckState.Unchecked;
 
           if (sender is Label lab)
 
           {
 
               Extra_Name lab.Tag.ToString();
 
           }
 
           else if (sender is PictureBox btn1)
 
           {
 
               Extra_Name btn1.Tag.ToString();
 
           }
 
           else if (sender is Guna.UI2.WinForms.Guna2CheckBox ck)
 
           {
 
               checkd ck.CheckState;
 
           }

 
           MessageBox.Show(Extra_Name.ToString());

 
       }
 
       else
        
{
 
           Food_Moved false;
 
       }
 
   
ما اريدة هنا هو كيف استطيع جلب جميع النصوص ل جميع ال labels الذي تم عمل check لل checkbox في تلك ال usercontrols.
للتوضيح : لناخذ الصورة المرفقة في الأعلى :
عند الضغط على موافق (إضافة الصنف - يجب تغير النص) يجب ان احصل على الاتي : Extra 1 - Extra 7

امل اني وضحت ما اريد.



RE: get label texts of all checked checkbox in user control inside flowlayoutpanel - asemshahen5 - 07-11-20

بسم الله الرحمن الرحيم .
اعمل يوزر كنترول صممها و ضع بها ما تريد من ادوات ثم اضف خاصيتان جديدتان للاداة الجديدة الخاصية الاولى تشيكد الخاصة بالتشك بوكس الخاصية الثانية تيكست الخاصة بالليبل .
الان اصبت الامور اسهل عن طريق لووب في الفلو بانل تستطيع وضع شرط على الخاصية الجديدة تشيكد الخاصة بالاداة الخاصة بك و الله الموفق .


RE: get label texts of all checked checkbox in user control inside flowlayoutpanel - Rabeea Qbaha - 07-11-20

شكرا لك اخي عصام فعلا حل منطقي.

لكن قمت بحل الموضوع بالطريقة الاتية :

PHP كود :
private IEnumerable<stringGetCheckedNames() =>
 
   flowLayoutPanel2.Controls.OfType<Extra_uc>()
 
   .Where(uc => uc.CheckBox1.Checked)
 
   .Select(uc => uc.Extras_name); 



RE: get label texts of all checked checkbox in user control inside flowlayoutpanel - asemshahen5 - 07-11-20

ايضا طريقة جيدة لكن موضوع الاداة و الخاصية مفيد للمستقبل اي نفس الكود لاكن بدون اسم اداة التشك بوكس اي
Uc.checked من وجهة نظري اجمل و اسرع و تصبح مكتبة ديناميكية لتستخدمها في اي مشروع مستقبلي دون عناء .
موفق انشاء الله .


RE: get label texts of all checked checkbox in user control inside flowlayoutpanel - Nadia kasem - 08-05-22

مرحبا انا طالبة واعمل ع مشروع التخرج وعند وصولي لنقطة معينة لم اجد الكود الذي احتاجة في مشروعي هو كود لجلب عشر صفوف ويحفظها ، ارجو المساعدة