shanawazway Ответов: 5

как закрыть одну форму через другую форму нажатием кнопки


как закрыть одну форму через другую форму нажатием кнопки.

Я попытался использовать приведенный ниже код , но он не работает:

private void btnInventory_Click(object sender, EventArgs e)
{           
            frmCustomer f = new frmCustomer();
            f.Close();
           
}


Что такое правильный путь ?

Ценю ваши отзывы.
благодарный вам

5 Ответов

Рейтинг:
40

JF2015

Привет,

frmCustomer f = new frmCustomer();
f.Close();


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

Как может выглядеть ваш код:

frmCustomer f;

private void btnShowDialog_Click(object sender, EventArgs e)
{
  if(f == null)
    f = new frmCustomer();
  
  f.Show();
}

private void btnInventory_Click(object sender, EventArgs e)
{
  if(f != null)
    f.Close();
}


Рейтинг:
30

E.F. Nijboer

Код, который вы пробовали, никогда не будет работать. Вы создаете new object от frmCustomer и закройте его, прежде чем открыть. Вы должны понимать это, когда будете подавать заявление new вы создаете полностью new object. Этот object это одно и то же class из ранее созданного object но данные не совпадают. Поэтому вы не можете контролировать другого objectс той же class просто используя другой пример этого object.

Чтобы закрыть эту тему Form вам понадобится фактическая ссылка на это Form Так что вам нужно будет дать это своему frmInventory (вы можете, например, добавить свойство, в котором вы можете установить эту ссылку) и использовать его для закрытия другого Form.

Другой способ-искать это Form во всех открытых Formс вашего Application подобный этому:

for (int index = Application.OpenForms.Count-1; index>= 0; index--)
{
    if (Application.OpenForms[1].Name == "Customer")
    {
        Application.OpenForms[1].Close;
    }
}

Имейте в виду, что использование foreach как это может привести к Exception:
foreach (Form form in Application.OpenForms)
{
    // ...
}

Это происходит потому, что вы изменили список в цикле, который может дать вам недопустимое исключение операции.

Удачи вам!


shanawazway

Спасибо за лучший ответ.
Здесь я сделал одно изменение в вашем цикле For : index++ => index--
Он вошел в бесконечную петлю
До:
for (int index = Application.Открытые формы.Count-1; index>= 0; index++)

После:
for (int index = Application.Открытые формы.Count-1; index>= 0; index--)


спасибо снова.

Member 12810663

простое решение

если (приложение.OpenForms[1].Имя == "Клиент")
{
Приложение.OpenForms[1].Закрывать;
}

E.F. Nijboer

Да, ваше исправление совершенно верно. За исключением того, что я не вижу изменений в ответе, но я обновлю его, чтобы он был правильным.

Sunasara Imdadhusen

Хороший Ответ!

Рейтинг:
2

Anoop Ananthan

frmCustomer f = новый frmCustomer();
это создало новый объект, а не тот, который вы на самом деле хотите закрыть

предположим, что существует 2 формы
Форма 1 и форма 2
в form1, если вы создаете объект (f2) Form2
вы можете делать с объектом все, что угодно (f2).
Но из формы 2 вы не можете получить доступ к форме 1.
чтобы получить доступ к первой форме, вы должны пройти через параметр, функцию, свойство или конструктор
надеюсь, это поможет


Рейтинг:
2

Ömer33

Привет, у меня была такая же проблема.

Но в моем случае мне пришлось закрыть основную форму из моего пользовательского класса кнопок, что я и сделал...


этот.Родитель.Располагать();

это(мой пользовательский класс кнопок)

родитель(форма или контейнер, в котором находится кнопка)

или заявление.Exit(); //закрывает программу отверстия.

Я надеюсь, что это помогло, С наилучшими пожеланиями


Kats2512

8-летний вопрос, на который уже был дан ответ.

Рейтинг:
0

OriginalGriff

Ключ к разгадке кроется в слове:

frmCustomer f = new frmCustomer();
f.Close();
Что делает new сайта сделать?

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

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

Найдите экземпляр существующей формы и закройте его. Где вы его открыли? Посмотрите туда, и, надеюсь, это означает, что вы где-то сохранили экземпляр. Если нет, то вам придется это сделать. Или проявите творческий подход к объекту приложения - на самом деле лучше сохранить экземпляр.