Member 14176556 Ответов: 3

C# одна кнопка, чтобы иметь 2 функции?


Привет,

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

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

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

//Код ниже открывает меню настроек игры.
частная SettingsBTN_Click недействительным(объект отправителя, EventArgs в электронной)
{
Kid_Merchant_Hero.Игровые настройки Ф = новый Kid_Merchant_Hero.Игровые настройки();
Ф.Показать();
}

3 Ответов

Рейтинг:
27

OriginalGriff

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

private Kid_Merchant_Hero.GameSettings gameSettings = null;
Тогда вы можете использовать это, чтобы решить, что делать:
private void SettingsBTN_Click(object sender, EventArgs e)
{
if (gameSettings == null)
   {
   gameSettings = new Kid_Merchant_Hero.GameSettings();
   gameSettings.FormClosed += gameSettings.FormClosed;
   gameSettings.Show();
   SettingsBTN.Text = "Close";
   }
else
   {
   gameSettings.Close();
   }
}
Обработайте событие FormClosed, чтобы очистить форму:
private void gameSettings_FormClosed(object sender, FormClosedEventArgs e)
    {
    gameSettings = null;
    SettingsBTN.Text = "Open";
    }
И вы закончили.


Member 14176556

Это сработало отлично, спасибо :D и очень доволен быстротой вашего ответа, Спасибо.

OriginalGriff

Всегда пожалуйста!

Рейтинг:
2

Gerry Schmitz

Вы можете перечислить все созданные вами окна / формы (WPF и Windows.Форма приложения). Затем вы можете решить показать, скрыть, отбросить любой из них или создать дополнительные элементы, не поддерживая отдельную коллекцию.

Как получить все окна в приложении | Microsoft Docs[^]


Member 14176556

спасибо за ваше решение.

Рейтинг:
0

AnkushK1

Я не уверен, какие данные содержит ваш объект GameSettings, вам нужно предоставить более подробную информацию, но есть ли флаг, который может представлять, открыта ли ваша форма, если да, то сделайте что-то вроде ниже:

если(!f.IsOpen)
Ф.Показать();
еще
Ф.Рядом();

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


Member 14176556

спасибо за ваше решение.