winforms - показать ту же форму дважды? - PullRequest
0 голосов
/ 07 января 2019

У меня есть быстрое и грязное приложение winforms, которое я написал, Который имеет много элементов управления логикой и внутренней логикой, записанной в классе Form ().

Мне нужно просто открыть одну и ту же форму дважды (где одна форма будет похожа на ссылку на другую), и я ищу другое быстрое и грязное решение.

Что код в моем классе Программы:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Main());
        //Can I run Main() form a again as reference to the intial form?
    }
}

Да, я знаю, что в лучших практиках упоминается, что я должен отделиться от пользовательских элементов управления и т. Д., Пожалуйста, не судите. Помощь приветствуется, спасибо заранее.

Ответы [ 4 ]

0 голосов
/ 07 января 2019

тебе нужно сделать вот так

static class Program
{

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var thread = new Thread(ThreadStart);            
        thread.TrySetApartmentState(ApartmentState.STA);
        thread.Start(); 
        Application.Run(new Form1());

    }
    private static void ThreadStart()
    {
        Application.Run(new Form2()); 
    }

}

Вы также можете запустить другие формы из события Form.Load FirstForm.

private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Show();
}
0 голосов
/ 07 января 2019

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

Вы можете сделать это, подключив его к экземпляру Main перед загрузкой из метода Application.Run(...); файла Program.cs, см. Ниже пример кода.

public void Main_Load()
{
    var newForm = new Main();
    newForm.Show();
}

важно не использовать ShowDialog();, чтобы не блокировать первую форму.

Надеюсь, я правильно понял.

0 голосов
/ 07 января 2019

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

static int control = 0;
...
if (control == 0)
{
control = 1;
var newForm = new Main();
newForm.Show();
}
0 голосов
/ 07 января 2019

лучший вариант для вас - добавить метод Click в форму, создать новый экземпляр формы и показать его

 private void Form1_Click(object sender, EventArgs e)
        {
            var frm = new Form1();
            frm.Show();
        }

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

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