public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(button1_Click<List<object>>);
button2.Click += new EventHandler(button1_Click<object>);
}
private void button1_Click<T>(object sender, EventArgs e) where T: new()
{
var o = new T();
MessageBox.Show(o.GetType().FullName);
}
}
Вот набросал похожее, ничего не исчезает, проект WinForms. Запускал, сохоанял, отчищал, пересобирал проект, все на месте. VS19. Установите последнюю студию или все обновы на нее.
ЗЫ: Конечно такое решение неплохо (Хотя на WPF гораздо элегантнее делается, без всякого ручного присвоения событий).
Вариант 2. если глюк останется
public partial class Form1 : Form
{
private Dictionary<string, Type> _forms = new Dictionary<string, Type>();
public Form1()
{
InitializeComponent();
_forms.Add("button1", typeof(Form));
_forms.Add("button2", typeof(Form));
}
private void button1_Click(object sender, EventArgs e)
{
var name = (sender as Button).Name;
Form form = (Form)Activator.CreateInstance(_forms[name]);
form.Show();
}
}
}