el_tot93 Ответов: 2

Как можно закрыть форму и снова открыть ту же самую форму


я пытаюсь закрыть от и открыть его снова с помощью этого кода но он не закрыл форму я нашел ее в фоновом режиме и открыл для нее другую

private void Graph_Load(object sender, EventArgs e)
    {
       System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();

        timer1.Interval = 60000;//1 minutes
        timer1.Tick += new System.EventHandler(Timer1_Tick);
        timer1.Start();
    } 

 private void Timer1_Tick(object sender, EventArgs e)
    {
        //do whatever you want 
        RefreshMyForm();
    }


    private void RefreshMyForm()
    {
        this.Close();

        Graph1 graph = new Graph1();
        graph.Show();


    }


Что я уже пробовал:

private void RefreshMyForm()
        {
            this.Hide();
            var Graph1 = new Graph1();
            Graph1.Closed += (s, args) => this.Close();
            Graph1.Show();

        }


и

private void RefreshMyForm()
        {
            this.Hide();
            Graph1 sistema = new Graph1();
            sistema.ShowDialog();
            this.Close();

        }

Richard Deeming

Репост
Это тот же самый вопрос, который вы опубликовали вчера:
https://www.codeproject.com/Questions/1277212/How-do-I-refresh-form-with-timer[^]

2 Ответов

Рейтинг:
1

el_tot93

ТХ братан но я ничего не понимаю

RickZeeland

Ваш таймер запускает отдельный поток, который вызывает Timer1_Tick (), здесь вам нужно проверить InvokeRequired, прежде чем делать что-то в основном потоке пользовательского интерфейса (User Interface).
Извините за это, но эта уродливая конструкция-нечто неизбежное, и вам придется научиться ей, чтобы стать хорошим программистом на C#.

Рейтинг:
1

Dylvh

Причина, по которой он открывает другую форму, заключается в том, что вы инициализируете новый экземпляр формы, имея

Graph1 Sistema = new Graphh1();


Попробовать следующее

private void RefreshMyForm()
        {
            if (this.Visible)
            {
               this.Hide();
            }
            else
            {
               this.Show();
            }

        }


Не инициализируя новый экземпляр, вы работаете с тем, который у вас уже есть. На самом деле он не закрывает форму, а скорее делает ее невидимой через минуту, а через минуту снова делает ее видимой.

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