Как открыть форму из основной, затем я возвращаюсь к основной, а затем снова открываю вторую, не удваивая формы - PullRequest
0 голосов
/ 01 апреля 2020

Я хотел открыть вторую форму из основной формы, и я возвращаюсь, и когда я снова открываю ее на рабочем столе, мне представляется вторая форма и белая форма. Как это исправить?

Код основной формы:

    private void Options_Click(object sender, EventArgs e)
    {
        gameOptions optiuni = new gameOptions();
        optiuni.Show();
        this.Hide();
    }

Код второй формы

    private void Back_Click(object sender, EventArgs e)
    {
        Load load = new Load();
        load.Show();
        this.Hide();
    }

1 Ответ

0 голосов
/ 01 апреля 2020

Звучит так, будто вы должны открыть свою вторую форму модально.

В любом случае ваша проблема заключается в том, что вы создаете второй экземпляр вашей первой формы, который, я полагаю, называется Load при попытке выйти из вашей второй формы.

Существует много способы обойти это.

Вы можете иметь один класс, управляющий навигацией между формами, который уменьшит их зависимость друг от друга, или вы передадите ссылки между ними, так что ваша вторая форма может показать первую перед закрытием .

edit Хорошо.

  1. Я создал новое приложение формы Windows с помощью Visual Studio.
  2. Затем я добавил новую форму в проект.
  3. На каждую форму я добавил Кнопка.
  4. Я ничего не переименовал, следовательно, Form1 и Form2.

Это код каждого из них:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 newForm = new Form2(this);
            newForm.Show();
            this.Hide();
        }
    }

и

public partial class Form2 : Form
{
    private readonly Form1 _parent;

    public Form2(Form1 form1)
    {
        InitializeComponent();
        _parent = form1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _parent.Show();
        this.Close();
    }
}

Это то поведение, которое у вас после? Пожалуйста, игнорируйте все, что связано с позиционированием окна.

edit

Хорошо. Вот пример использования класса stati c для управления навигацией, он должен дать вам что-то для работы.

   public static class NavigationClass
    {
        private static readonly Stack<Form> NavigationStack = new Stack<Form>();

        public static void NavigateTo(Form formInstance)
        {
            if (formInstance == null) return;

            if (NavigationStack.Count > 0)
            {
                var formToHide = NavigationStack.Peek();   
                formToHide.Hide();
            }
            else
            {
                RootForm?.Hide();
            }
            NavigationStack.Push(formInstance);
            formInstance.Show();
        }

        public static void NavigateBack()
        {
            if (NavigationStack.Count > 1)
            {
                var formToClose = NavigationStack.Pop();
                formToClose.Close();
                var formToShow = NavigationStack.Peek();
                formToShow.Show();
                return;
            }
            if (NavigationStack.Count > 0)
            {
                var formToClose = NavigationStack.Pop();
                formToClose.Close();
            }
            RootForm?.Show();

        }

        public static Form RootForm { get; set; }
    }

Я установил Form1 как форму root в program.cs

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        NavigationClass.RootForm = new Form1();
        Application.Run(NavigationClass.RootForm);
    }
}

Тогда тогда Form1 и Form2, показанные выше, теперь изменились на:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
         NavigationClass.NavigateTo(new Form2());
    }
}

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        NavigationClass.NavigateBack();
    }
}

Я думаю, что это должно дать вам что-то для go on.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...