Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Список дочерних форм MDI-формы


Автор: Exception 31.5.2007, 18:32
Метод GetForm позволяет получить форму по её типу. Если форма была создана, будет возвращён уже существующий экземпляр, иначе будет создан и возвращён новый. Метод RemoveForm удаляет форму из коллекции дочерних.

Код
public class MdiForm : Form
{
    private Dictionary<string, Form> childForms = new Dictionary<string, Form> ();

    /// <summary>Возвращает создаваемую по требованию дочернюю форму указанного типа.</summary>
    /// <typeparam name="TForm">Тип формы.</typeparam>
    private TForm GetForm<TForm> ()
        where TForm: Form, new()
    {
        TForm form = this.childForms[typeof(TForm).Name] as TForm;
        if (form == null)
        {
            form = new TForm ();
            form.MdiParent = this;
            this.childForms[typeof(TForm).Name] = form;
        }
        return form;
    }

    /// <summary>Убирает форму типа <c>TForm</c> из коллекции дочерних.</summary>
    /// <typeparam name="TForm">Тип формы.</typeparam>
    /// <returns>
    /// <c>true</c>, если форма найдена и удачно удалена из коллекции; иначе - <c>false</c>.
    /// </returns>
    private bool RemoveForm<TForm> ()
        where TForm: Form, new()
    {
        return this.childForms.Remove (typeof(TForm).Name);
    }

    /// <summary>Пример использования кода.</summary>
    public void SomeMethod ()
    {
        SomeForm a = this.GetForm<SomeForm> ();
        SomeOtherForm b = this.GetForm<SomeOtherForm> ();
        SomeOtherForm c = this.GetForm<SomeOtherForm> ();
        Assert.IsTrue (b == c);
        this.RemoveForm<Form2> ();
        SomeForm a2 = this.GetForm<SomeForm> (); // снова создаём экземпляр SomeForm
        Assert.IsTrue (a != a2); // это уже другой экземпляр!
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)