как создать динамическую кнопку в приложении c # Windows

#c# #windows #visual-studio #winforms

#c# #Windows #visual-studio #winforms

Вопрос:

у меня есть две layutflowpanel 1-flowpanel_category 2-flowpanel_products

когда я использую вложенный цикл for внутри кнопки, нажмите, чтобы получить продукты из текущей выбранной категории, другая панель потока_prd не показывает, что продукты из categorey, возможно, у меня какая-то ошибка в какой-то момент

я установил внутри InitialComponents этот код для повторного поиска всех элементов из category, чтобы поместить его в flowpanel_category

  //get all category and set it all to flowpanel_cat
            
            FLOWPANEL_CAT.Controls.Clear();
            try
            {
                DT = clsgetcat.get_prd_categories();

                for (int i = 0; i <= DT.Rows.Count; i  )
                {
                    Extendedbutton Eb = new Extendedbutton();//with Extendedbutton this time
                    Eb.prdid = DT.Rows[i][0].ToString();//this asigns product_id to extended txtprdid
                    Eb._prdnme = DT.Rows[i][1].ToString();//this asigns product_nme to extended txtprdnme
                    Eb._myval = DT.Rows[i][1].ToString();//this asigns products to extended buttondescription

                    Eb.Name = DT.Rows[i][1].ToString();
                    Eb.Text = DT.Rows[i][1].ToString();
                    Eb.ForeColor = Color.White;
                    Eb.BackColor = Color.SkyBlue;
                    Eb.Font = new Font("Serif", 10, FontStyle.Regular);
                    Eb.Width = 100;
                    Eb.Height = 60;
                    Eb.TextAlign = ContentAlignment.MiddleCenter;
                    Eb.Margin = new Padding(5);

                    Button b = addbutton(i);
                    Eb.Click  = new System.EventHandler(this.buttonclick);
                    
                    FLOWPANEL_CAT.Controls.Add(Eb);


                }

            }
            catch
            {
                return;
            }
  

я использую внутреннюю кнопку, щелкните этот код, чтобы отобразить все элементы из категории внутри flowpanel_prodcuts

 public void buttonclick(object sender, EventArgs e)
        {
            FLOWPANEL_PRD.Controls.Clear();
            for (int i = 0; i <= DT.Rows.Count; i  )
            {
                try
                {
                    for (int j = 0; j <= i; j  )
                    {
                        Extendedbutton Eb = new Extendedbutton();//with Extendedbutton this time
                        Eb._prdid = DT.Columns[0].ToString();
                        string prdid = ((Extendedbutton)sender)._prdid;
                        Eb._prdnme = DT.Columns[1].ToString();
                        string prdnme = ((Extendedbutton)sender)._prdnme;
                        Eb.Name = DT.Rows[j][1].ToString();
                        Eb.Text = DT.Rows[j][1].ToString();
                        Eb.ForeColor = Color.White;
                        Eb.BackColor = Color.SkyBlue;
                        Eb.Font = new Font("Serif", 10, FontStyle.Regular);
                        Eb.Width = 100;
                        Eb.Height = 60;
                        Eb.TextAlign = ContentAlignment.MiddleCenter;
                        Eb.Margin = new Padding(5);

                        Button b = addbutton(j);
                        Eb.Click  = new System.EventHandler(this.buttonclick);
                        txttotalamount.Clear();
                        txtprdqty.Clear();
                        txtprdqty.Focus();
                        FLOWPANEL_PRD.Controls.Add(Eb);

                    }

                }
                catch
                {
                    return;
                }

                
                
                
            }
            txtprdqty.Focus();
        }


        Button addbutton(int i)
        {
            Extendedbutton EB = new Extendedbutton();
            EB.Name = EB._myval;
            EB.Text = EB._myval;
            EB.ForeColor = Color.White;
            EB.BackColor = Color.SkyBlue;
            EB.Font = new Font("Serif", 10, FontStyle.Regular);
            EB.Width = 100;
            EB.Height = 60;
            EB.TextAlign = ContentAlignment.MiddleCenter;
            EB.Margin = new Padding(5);
            return EB;
        }
  

на этом рисунке показан результат вывода, но у меня есть какая-то ошибка, когда я получаю продукты из каждой категории

это результат вывода, но у меня есть какая-то ошибка, когда я получаю продукты из каждой категории

Комментарии:

1. Большинством динамических вещей легче управлять в WPF, см., Например timdams.com/2011/02/08 /…

2. но у меня сейчас большой проект, я не могу изменить все, что работает, на WPF;) но спасибо за предложение

3. @Shihabmohamed, основываясь на вашем коде, у меня есть несколько вопросов. Во-первых, можете ли вы рассказать мне о взаимосвязи между продуктом и категорией? В вашем коде я этого не вижу. Во-вторых, вам будет лучше предоставить соответствующий код о DT. Наконец, каков ваш желаемый результат и с какой ошибкой или исключением вы сталкиваетесь?

4. у меня есть Datatable, использующий его для получения данных из хранимой процедуры, этот Datatable DT я буду использовать для них категории и продукты

5. Вы можете установить точку останова и щелкнуть значок лупы, чтобы отобразить таблицу данных. Например, []: i.stack.imgur.com/71b7I.png Кроме того, пожалуйста, скажите мне, с какой ошибкой вы сталкиваетесь.