Goran Bibic Ответов: 1

Ясно, частный недействительными с кнопкой c#


Мой код работает и автоматически создает кнопки...

Все работает нормально

Мне нужна четкая форма при нажатии кнопки

какая-то помощь?

Что я уже пробовал:

private void artikli_buttoni()  //pice
       {

           SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=bss;Integrated Security=True");
           //SqlConnection con = new SqlConnection(cs);
           SqlCommand cmd = new SqlCommand("SELECT ime+'-'+cijena_sa_porezom, data FROM roba_usluge where grupa_artikala='Piće'", con);


           var da = new SqlDataAdapter(cmd);
           var ItemTable = new DataTable();
           da.Fill(ItemTable);

           con.Open();
           Int32 count = ItemTable.Rows.Count;
           con.Close();

           int top = 70;
           int left = 10;
           for (int i = 1; i <= count; i++)

           {
               Button button = new Button();
               button.Size = new Size(128, 128);
               button.BackColor = Color.Transparent;
               //button.FlatStyle = FlatStyle.Flat;
               button.FlatAppearance.BorderSize = 0;
               button.Font = new System.Drawing.Font("Trebuchet MS", 10);
               button.TextAlign = ContentAlignment.TopCenter;
               button.BackgroundImageLayout = ImageLayout.Zoom;

               button.Left = left;
               button.Top = top;
               button.Text = ItemTable.Rows[i - 1][0].ToString();

               if (ItemTable.Rows[i - 1][1] != null)
               {
                   try
                   {
                       byte[] _byte = (byte[])ItemTable.Rows[i - 1][1];
                       MemoryStream ms = new MemoryStream(_byte);
                       button.BackgroundImage = System.Drawing.Image.FromStream(ms);//bilo image
                   }
                   catch { }
               }


               button.Click += new EventHandler(this.btn_Click);


               this.Controls.Add(button);
               if (i % 5 == 0)
               {
                   left = 10;
                   top += button.Height + 2;
               }
               else
               {
                   left += button.Width + 2;
               }



           }
       }

Goran Bibic

При нажатии на кнопку Я хочу новое значение

На форме остаются кнопки от приватной пустоты

0x01AA

Ни этот комментарий, ни вопрос не понятны :(

Что значит Ясная форма? Очистка всех ваших динамических созданных кнопок? Если да, то самый ленивый способ-зарегистрировать все динамические созданные кнопки в списке. Этот список можно использовать для очистки кнопок.

Goran Bibic

Очистка всех динамических созданных кнопок. Да это вопрос

0x01AA

Затем, пока вы создаете кнопки, зарегистрируйте их в списке и используйте этот список, чтобы удалить кнопки из вашей формы с помощью чего-то вроде Controls.Remove(Control value)

#realJSOP

Не забудьте также отцепить обработчик событий для каждой кнопки.

0x01AA

+5

Goran Bibic

Прямо что делать?

0x01AA

Что-то вроде (обратите внимание, псевдокод):

Форма:
List<Button> dynBtnList= new...;

AddBtn:

for each button needed:
Button btn= new Button...
btn.Click+= this.btn_Click;
dynBtnList.Add(btn)
this.Controls.Add(btn);

RemoveBtn:

for each(Button btn in dynBtnList;)
{
btn.Click-= this.btn_Click;
Controls.Remove(btn);
}
dynBtnList.Clear();

Goran Bibic

Я попробую сейчас

0x01AA

Удачи :-)

Goran Bibic

Я решаю...Спасибо...опубликуйте решение, которое я принимаю

0x01AA

Спасибо

1 Ответов

Рейтинг:
12

0x01AA

Возможно, ленивым(?)/прагматичным решением будет регистрация динамических созданных кнопок в списке. Позже этот список можно будет использовать для их удаления.

Намек на @Джон Симмонс-изгой-программист Джон Симмонс / вне закона программиста - профессиональный профиль[^]: "Не забудьте также отцепить свой обработчик событий для каждой кнопки"

Наконец этот схематический псевдокод должен помочь вам реализовать ваш запрос

Форма:

List Button dynBtnList= new...;

AddBtn:
for each button needed:
Button btn= new Button...
btn.Click+= this.btn_Click;
dynBtnList.Add(btn)
this.Controls.Add(btn);

RemoveBtn:
for each(Button btn in dynBtnList;)
{
  btn.Click-= this.btn_Click;
  Controls.Remove(btn);
}
dynBtnList.Clear();