У меня есть этот универсальный метод для открытия форм на панели, этот метод наследует от Form
, в настоящее время с ограничением, что у него есть пустой конструктор (where T : Form, new())
public void OpenForms<T>() where T : Form, new()
{
Form form = container_panel.Controls.OfType<T>().FirstOrDefault();
if (form !=null)
{
//If the instance is minimized we leave it in its normal state
if (form.WindowState == FormWindowState.Minimized)
{
form.WindowState = FormWindowState.Normal;
}
//If the instance exists, I put it in the foreground
form.BringToFront();
return;
}
//The form opens
form = new T();
form.TopLevel = false;
container_panel.Controls.Add(form);
container_panel.Tag = form;
form.Show();
}
Таким образом, чтобы вызватьit:
OpenForms<Form1>();
Как я могу адаптировать эту функцию для передачи параметров в форму?
В этом случае мне нужно передать два параметра в форму, что-тонапример:
OpenForms<Form1>(param1, param2);
Не все формы получают параметры, но в будущем вам может понадобиться использовать 1/2/3 параметров в зависимости от формы.
Параметрыможет различаться по типу: bool
, string
, int
...
Что это может получить что-то вроде этого:
public void OpenForms<T>(params object[] args) where T : Form, new() { ... }
Идея состоит в том, чтобы использовать его следующим образом:
object[] args = new object[] { "a", true };
OpenForms<Form1>(args);
OpenForms<Form1>("a", 2, false);
OpenForms<Form1>();
Когда вы получаете параметры, вы можете использовать их при создании формы.
Любая идея, как я могу достичьthis?
Редактировать:
Полагаю, эти два примера форм
public partial class Form1 : Form
{
public Form1(string param1, bool param2)
{
InitializeComponent();
}
//......
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//......
}
При попыткеЧтобы сделать вызов следующим образом:
OpenForms<Form1>("a" false); //Error
OpenForms<Form2>();
Ошибка:
должен быть неабстрактного типа с открытым конструктором без параметров, чтобы использовать его в качестве параметра 'T'в универсальном типе или методе 'AbrirFormulario (params object [])'