Member 14490820 Ответов: 1

Почему нельзя создать кнопку


LoadDB.в CS
public void Categories()
       {
           string query = "SELECT * FROM `categories` ";


           if (this.OpenConnection() == true)
           {
               LoadCat_frm LoadCat = new LoadCat_frm();
               MySqlDataAdapter adapter = new MySqlDataAdapter(query, connection);
               DataTable dt = new DataTable();
               DataSet ds = new DataSet();
               adapter.Fill(dt);
               ds.Tables.Add(dt);

                   int top = 0;
                   int left = 4;

                   foreach (DataRow dr in dt.Rows)
                   {
                       Button button = new Button();
                       button.FlatStyle = FlatStyle.Flat;
                       button.BackColor = Color.Gold;
                       button.Text = dr[1].ToString();
                       button.Font = new Font("Microsoft Sans Serif", 20, FontStyle.Bold);
                       button.Size = new Size(170, 85);
                       button.Left = left;
                       button.Top = top;
                       LoadCat_.panel1.Controls.Add(button); // here
                       top += button.Height + 2;
                   }
               }
       }




Форма form1.в CS
private void madeReq_frm_Load(object sender, EventArgs e)
       {
           dbConnect.Categories();
       }


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

я пытаюсь отделить класс и ОТ но после того как отделить это не работает

1 Ответов

Рейтинг:
2

OriginalGriff

Вы создаете новый экземпляр формы:

LoadCat_frm LoadCat = new LoadCat_frm();
Вы добавляете новую кнопку в форму:
Button button = new Button();
...
LoadCat_.panel1.Controls.Add(button);
Но вы никогда не показываете форму.

На первый взгляд, у вас уже есть экземпляр вашего LoadCat отображаемая форма - Если вы хотите добавить к ней кнопки, то вам нужно использовать существующий экземпляр, а не создавать новый.

Но... две вещи.
1) кнопки не получают обработчиков автоматически: если вы создаете кнопку и хотите, чтобы она что-то делала при нажатии, вам нужно добавить к ней обработчик.
2) вы не должны добавлять элементы управления в форму "извне" - это действительно противоречит дизайну OOPs, потому что он "блокирует" дизайн двух форм вместе, чтобы вы могли вносить изменения в одну из них, не рассматривая влияние на другую. Гораздо лучше создать метод в "форме назначения", который принимает данные в качестве параметра и добавляет кнопку по мере необходимости.


Member 14490820

Спасибо, но наш учитель говорит нам, что после того, как вы изучите курс ООП, вам нужно, как использовать ООП для кодирования вашего кода, какие-либо рекомендации для этого случая?

OriginalGriff

Прочтите, что я сказал в (2) ...