Рейтинг:
2
Wendelius
Вы можете использовать одноэлементный шаблон, чтобы гарантировать, что существует только один экземпляр, но я думаю, что было бы проще просто перебирать его Приложение.Свойство OpenForms (System.Окна.Формы)[^].
Пройдитесь по коллекции, проверьте, существует ли форма, и если да, активируйте ее, если нет, создайте.
[РЕДАКТИРОВАТЬ]
Пример цикла для итерации по формам
bool formOpen = false;
foreach (Form form in Application.OpenForms) {
if (form.Name == "Form1") {
formOpen = true;
break;
}
}
if (formOpen) {
MessageBox.Show("Form is already open");
} else {
MessageBox.Show("Form is not open");
}
Member 10850253
Я попытался сравнить приложение.Открытые формы.Count==0, и если это правда, то я запустил приложение, но оно не работает, и мне было интересно, не могли бы вы сказать мне, где мне нужно использовать это свойство?
Wendelius
Мне очень жаль, но я не совсем понимаю. Существуют ли формы в разных приложениях?
Другими словами, вы пытаетесь предотвратить запуск приложения, если оно уже выполняется, или вы пытаетесь предотвратить повторное открытие формы внутри одного приложения?
Wendelius
Которая Да? Только одна заявка или только одна форма внутри заявки?
Member 10850253
одна форма в заявке
Wendelius
Взгляните на измененный ответ.
Member 10850253
Я добавил решение, чтобы вы могли просмотреть код,не могли бы вы помочь?
Wendelius
Форма не найдена, потому что вы поместили код в начало программы, где еще не созданы формы.
Основной метод обычно запускается только один раз, когда приложение запускается. на данный момент только одна форма создается с помощью метода Run класса Application. Таким образом, на данный момент в одном приложении невозможно создать две одинаковые формы.
Не могли бы вы объяснить ситуацию более подробно?
Member 10850253
Я не знаю, где разместить этот код внутри моей формы, чтобы он не создавал 2 экземпляра. Я знаю, что где-то должно быть что-то вроде new form (), но я не знаю.
Wendelius
Но если у вас нет кода
новая форма BatteryMonitorForm()
где угодно, только не в приложении.Run (new BatteryMonitorForm ()); тогда у вас не будет двух форм этого класса...
Какова ситуация, когда у вас есть 2 формы BatteryMonitorForm?
Member 10850253
Чего я не хочу, так это чтобы приложение открыло 2 экземпляра приложения, если я дважды щелкну ярлык приложения дважды.
Wendelius
Таким образом, вы хотите предотвратить запуск второго экземпляра приложения. Для этого требуется мьютекс. Вам нужно проверить, если мьютекс уже создан, а если нет, то вы его резервируете. Каждый экземпляр вашего приложения выполняет эту проверку, поэтому только первый из них может быть запущен.
Есть хороший пост на эту тему, посмотрите c# - Как правильно создать приложение с одним экземпляром? - переполнение стека[^]
Рейтинг:
2
Member 10850253
Я сделал это в program. cs
public static bool bf = false;
static void Main()
{
foreach (Form form in Application.OpenForms)
{
if (form.Name == "BatteryMonitorForm")
{
bf = true;
break;
}
}
if (!bf)
{
//Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new BatteryMonitorForm());
}
else { }
}
}
И все равно ничего не получается, я не знаю, что делать.
Не могли бы вы помочь?
Спасибо.