Я работаю над приложением, в котором существует одна основная форма и несколько других форм, которые могут использоваться одновременно. когда пользователь нажимает для открытия другой формы, я хотел бы сделать ее так, чтобы нажатие кнопки для формы не открывало форму снова, если это уже открыто.
привычка showDialog работает, потому что у пользователя все еще должен быть доступ к средствам управления на основной форме.
вот мой код для окна справки, все другие формы открывают тот же путь.
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
Form help = new help();
help.Show();
}
Используйте одну кнопку:
class HelpForm : Form
{
private static HelpForm _instance;
public static HelpForm GetInstance()
{
if(_instance == null) _instance = new HelpForm();
return _instance;
}
}
.......
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
HelpForm form = HelpForm.GetInstance();
if(!form.Visible)
{
form.Show();
}
else
{
form.BringToFront();
}
}
В зависимости от того, как вы хотите этим управлять, вы можете сделать несколько вещей:
В качестве альтернативы Вы можете использовать открытые формы приложения, чтобы посмотреть, открыто ли оно
btn_LaunchHelp(object o, EventArgs e)
{
foreach (Form f in Application.OpenForms)
{
if (f is HelpForm)
{
f.Focus();
return;
}
}
new help().Show();
}
Edit: Для большей ясности, это позволяет пользователю закрыть Справку в любое время и делает это намного проще в управлении, чем сохранение ссылки на окно Справки. Ничего не нужно чистить, ничего не нужно обслуживать.
Попробуйте сделать вашу помощь глобальной.
private Form help;
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
if(help == null)
help = new help();
help.Show();
}
вы рассмотрели создание формы MDI? Это гарантирует, что ваша родительская форма всегда видима, и ваши дочерние формы содержатся в родителе. Затем вы должны только обойти свой список форм и Шоу вызова на них. Никаким одиночным элементам не было нужно (который многие считают плохой практикой программирования так или иначе).