Как вынести создание формы в отдельный класс?

Как правильно вынести создание формы в отдельный класс и нормально к ней обращаться?

public void LoadBtn_Click(object sender, EventArgs e)
{
    Form form = new Form();
    form.Show();

    form.Controls.Add(listBox1);
    listBox1.Size = new System.Drawing.Size(200, 100);
    listBox1.Location = new System.Drawing.Point(10, 10);
    listBox1.DisplayMember = "Title";
    listBox1.ValueMember = "Path";
    listBox1.MultiColumn = true;
    listBox1.SelectionMode = SelectionMode.MultiExtended;
   
    butReset.Text = "Сбросить настройки";
    butReset.Location = new Point(140, 160);
    form.Controls.Add(butReset);

    butLoad.Text = "Принять";
    butLoad.Location = new Point(30, 160);
}

Сейчас на кнопке висит много кода (Создание формы в том числе). Смысл в том, что этот код нужно использовать во множестве разных мест. Мне бы хотелось иметь возможность быстро интегрировать код создания формы в другие проекты и иметь возможность масштабирования сего кода. Сейчас выглядит ужасно (на мой взгляд) , но как его вынести я не знаю.


Ответы (1 шт):

Автор решения: Aziz Umarov

Как вариант так

public void LoadBtn_Click(object sender, EventArgs e)
{
    Form form = new MyCustomForm();
    form.Show();

}

у вас заготовленная форма и вы её создаёте.

или другой вариант.

Если форма предполагает создание динамически то рекомендую создать фабрику. Которая и будет генерировать вам формы

class FormFactory {

   public static Form createForm(yourParams) {
    // создаёте форму на основе параметров 
    Form form = new Form();
   
    form.Controls.Add(listBox1);
    listBox1.Size = new System.Drawing.Size(200, 100);
    listBox1.Location = new System.Drawing.Point(10, 10);
    listBox1.DisplayMember = "Title";
    listBox1.ValueMember = "Path";
    listBox1.MultiColumn = true;
    listBox1.SelectionMode = SelectionMode.MultiExtended;
   
    butReset.Text = "Сбросить настройки";
    butReset.Location = new Point(140, 160);
    form.Controls.Add(butReset);

    butLoad.Text = "Принять";
    butLoad.Location = new Point(30, 160);

    return form;

   }

}



public void LoadBtn_Click(object sender, EventArgs e)
{
    // подготавливаете параметры формы 
    ....
    Form form = FormFactory.createForm(yourParams);

    form.Show();    
}
→ Ссылка