rajkiran.07 Ответов: 1

Как создать один экземпляр winform, который создается на событии нажатия кнопки?


я работаю над формой приложения windows (FormA), у которой есть кнопка,после события button_click я хочу,чтобы была создана другая форма windows(FormB), которая является отдельной winform от основной winform (FormA). я хочу, чтобы экземпляр вновь созданной winform(FormB) имел только один экземпляр, после события нажатия кнопки он не должен создавать другую winform(FormB). есть ли способ сделать это, кроме использования синглтонного шаблона для FormB??Ожидая логического подхода в качестве ответов...Пожалуйста, дайте несколько вариантов..

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

ожидая эффективных подходов..

[no name]

Отключите кнопку, создающую другую форму. Проверьте коллекцию форм, чтобы увидеть, есть ли существующий экземпляр для формы, если есть, не создавайте новый. Большой вопрос в том, что есть ты пробовал?

Maciej Los

Это не может быть так просто! :смеяться

[no name]

Ну, самый простой способ-это разместить "вопрос" на CP и надеяться, что кто-то сделает вашу работу за вас.

rajkiran.07

я не ожидал, что код C# для моего запроса будет полезен, но подход, который мог бы указать мне направление, был бы полезен..

[no name]

И это именно то, что вы получили.

rajkiran.07

я попробовал это сделать с помощью singleton, но проблема заключается в том, что при второй попытке события button_click создается исключение при удалении объекта.

rajkiran.07

о, хорошо, я просто должен отключить кнопку до тех пор, пока объект, который был создан на button_click, существует...

rajkiran.07

Спасибо..и если я создам статическое количество полей при создании объекта и сравню, если оно больше 1, тем самым обеспечив условие, при котором объект создается, это тоже может сработать, не так ли?

rajkiran.07

Спасибо Graeme_Grant & NotPoliticallyCorrect...

1 Ответов

Рейтинг:
9

Graeme_Grant

Как уже упоминалось NotPoliticallyCorrect, если форма открыта, кнопка должна быть отключена.

Но чтобы ответить на ваш вопрос, следующий код делает то, что вы просите:

private void ButtonClick(object sender, EventArgs e)
{
    Form form = null;
    if (sender == button1)
    {
        if (Application.OpenForms[nameof(Form1)] == null)
            form = new Form1();
    }
    else // button2
    {
        if (Application.OpenForms[nameof(Form2)] == null)
            form = new Form2();
    }
    if (form != null)
    {
        form.Owner = this;
        form.Show();
    }
}