По-моему, сделайте следующее:
Для любого нового проекта, следуйте всем правилам FxCop. Можно хотеть отключить некоторых из них, с тех пор не все будет иметь смысл для проекта. Для существующего проекта следуйте правилам от этих категорий как минимальный набор:
, Так как они - обычно только немного нарушений правила в существующем проекте, по сравнению с другими категориями, но могут улучшить качество Вашего приложения. Когда эти правила будут четкими, попытайтесь зафиксировать следующие категории:
, Так как они облегчат для Вас определять ошибки, которые имеют отношение к нарушениям, но у Вас будет большой объем нарушений в существующем коде.
Всегда сортируют нарушения по, выравниваются/устраняют категорию и запускаются с критических. Пропустите предупреждения на данный момент.
В случае, если Вы не знали, существует также StyleCop, доступный от Microsoft, проверяя Ваш код на исходном уровне. Обязательно включите интеграцию MSBuild во время установки.
Вы можете взаимодействовать с коллекцией OpenForms, чтобы проверить, существует ли уже форма данного типа:
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(MyFormType))
{
form.Activate();
return;
}
}
Form newForm = new MyFormType();
newForm.MdiParent = this;
newForm.Show();
Насколько я знаю, стандартного способа нет. Вам придется реализовать это самостоятельно. Я бы сделал это следующим образом:
class TheForm: Form
{
private static TheForm Instance;
private TheForm() // Constructor is private
{
}
public static Show(Form mdiParent)
{
if ( Instance == null )
{
// Create new form, assign it to Instance
}
else
Instance.Activate(); // Not sure about this line, find the appropriate equivalent yourself.
}
protected override OnFormClose(EventArgs e)
{
Instance = null;
base.OnFormClose(e);
}
}
Если безопасность потоков вызывает беспокойство, добавьте соответствующую блокировку
s.