Ваша функциональная проблема заключается в том, что вы не помещаете choice.Instance
в свой экземпляр вашего Form1
. Вместо этого вы создаете новую форму, помещаете ее туда, а затем отбрасываете эту форму.
Однако у вас также есть проблема в вашем дизайне, когда вы нарушаете принцип, в котором UserControl
не должен иметь прямого доступа и изменения его родительской формы. Было бы лучше добавить событие в @new
, вызвать его с помощью нажатия кнопки, а затем обработать это событие в экземпляре формы.
Например:
new.cs:
namespace WindowsFormsApp1
{
public partial class @new : UserControl
{
private static @new _instance;
public static @new Instance
{
get
{
if (_instance == null)
_instance = new @new();
return _instance;
}
}
public event EventHandler StepCompleted;
public @new()
{
InitializeComponent();
}
private void choice_button_Click(object sender, EventArgs e)
{
StepCompleted?.Invoke(this, EventArgs.Empty);
}
}
}
И Form1.cs:
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void new_button_Click(object sender, EventArgs e)
{
if (!container.Controls.Contains(@new.Instance))
{
container.Controls.Add(@new.Instance);
@new.Instance.Dock = DockStyle.Fill;
@new.Instance.BringToFront();
}
else
{
@new.Instance.BringToFront();
}
}
private void new_StepCompleted(object sender, EventArgs e)
{
if (!container.Controls.Contains(choice.Instance))
{
container.Controls.Add(choice.Instance);
choice.Instance.Dock = DockStyle.Fill;
choice.Instance.BringToFront();
}
else
{
choice.Instance.BringToFront();
}
}
}
}
Теперь вы, очевидно, собираетесь работать с тем же экземпляром формы, поскольку он сам обрабатывает событие. Кроме того, @new
не нужно выполнять какой-либо неловкий поиск, чтобы найти правильный экземпляр Form1
и изменить форму.