Если я закрою одну из моих форм, они все закроются - PullRequest
0 голосов
/ 01 октября 2011

Я новичок в победе форм (C #).У текущей формы, которую я создаю, есть возможность создать новый (пустой) экземпляр самого себя, но если я когда-нибудь закрою этот первый экземпляр, все остальные также закроются.Это не то, что я хочу, чтобы произошло.(Однако закрытие любой формы, открываемой из первой, не закрывает другие)

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

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

Есть ли способ сделать это?

Ответы [ 5 ]

3 голосов
/ 01 октября 2011

Вы можете запускать столько форм, сколько вам нужно, но каждая в отдельном потоке

using System;
using System.Threading;
using System.Windows.Forms;

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

    private void Button1Click(object sender, EventArgs e)
    {
        var t = new Thread(() => Application.Run(new MyForm()));
        t.Start();
    }
}
2 голосов
/ 14 июня 2014

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

    Form newForm1 = new Form();
    this.Hide();
    newForm1.showDialog();
    this.Close();

вот и все !!!!..

2 голосов
/ 01 октября 2011

Вам не нужно закрывать форму Entry Point (MainForm).Проверьте код метода Main() в файле кода Program.cs.

public static void Main(string[] args) 
{
    // Starts the application.
    Application.Run(new Form1());
}

Чтение этой страницы.

Чтобы предотвратить закрытие формы, обрабатывайтесобытие Closing и задайте для свойства Cancel объекта CancelEventArgs, переданного в обработчик события, значение true.

0 голосов
/ 01 октября 2011
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //Application.Run(new Form1());

        new Form1().Show(); // any entry point with form
        Application.Run(); // without main form
    }
}

Program.cs

Вы можете использовать как этот блок кода. Но когда какая-либо форма закрыта, заявка не заканчивается. (Даже если последняя форма в приложении.) Потому что приложение не включает mainform.

Если приложение не имеет открытой формы. Приложение будет приостановлено в процессе. Тогда вы можете увидеть диспетчер задач. В результате вы будете вызывать вручную метод Application.Exit () в каждой форме закрытия событий.

0 голосов
/ 01 октября 2011

Коротко:

Первой формой каждого приложения Windows является основная форма.

Если оно закрывается, приложение также закрывается.

подробнее)

Чтобы решить эту проблему, вы можете вызвать Application.Run (пока я не знаю, умный он или нет)

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