С точки зрения управления памятью, поскольку вы показываете одну и ту же форму в нескольких местах, оптимальным подходом было бы реализовать шаблон синглтона, чтобы гарантировать использование только одного экземпляра
Все - я знаю, что это не совсем актуально, так как на вопрос был дан ответ, но чтобы ответить на вопрос nawfal относительно шаблона синглтона, я опубликую краткое описание и некоторый код здесь.
@ Nawfal - шаблон синглтона используется для обеспечения того, чтобы в приложении использовался только один экземпляр объекта. Существует огромное количество различных способов достижения этого, ознакомьтесь с базовым введением введение одноэлементного шаблона MSDN .
Для нетривиальных объектов, например, классы, это код, который я люблю использовать:
1: создать базовый класс Singleton
public abstract class SingletonBase<T> where T : class
{
protected SingletonBase() { }
public static T Instance
{
get { return SingletonFactory.Instance; }
}
/// <summary>
/// The singleton class factory to create the singleton instance.
/// </summary>
class SingletonFactory
{
static SingletonFactory() { }
SingletonFactory() { }
internal static readonly T Instance = GetInstance();
static T GetInstance()
{
var theType = typeof(T);
T inst;
try
{
inst = (T)theType
.InvokeMember(theType.Name,
BindingFlags.CreateInstance | BindingFlags.Instance
| BindingFlags.NonPublic,
null, null, null,
CultureInfo.InvariantCulture);
}
catch (MissingMethodException ex)
{
throw new TypeLoadException(string.Format(
CultureInfo.CurrentCulture,
"The type '{0}' must have a private constructor to " +
"be used in the Singleton pattern.", theType.FullName)
, ex);
}
return inst;
}
}
2: теперь наследуйте от вашего базового класса
public class myClass : SingletonBase<myClass>
{
// this is a private constructor
myClass() { }
private void somemethod()
{
}
public void SomeOtherMethod()
{
}
}
3: Наконец, везде, где вам нужно использовать myClass, вы вызываете его экземпляр, как показано ниже
class Program
{
static void Main(string[] args)
{
// here you call the single instance of myClass
myClass myClassInstance = myClass.Instance;
// run the public someothermethod of myClass
myClassInstance.SomeOtherMethod();
}