Aplikacje SDI i MDI

Większość programów zawiera więcej niż jedno okno. Oprócz okna głównego, w swoich programach wykorzystywać będziesz okna dodatkowe. Przykładem takiego okna może być choćby okienko Informacje o programie czy konfiguracja programu. Istnieją dwie drogi wyświetlania okien: jako SDI oraz MDI.
SDI (Single Dokument Interface) – Okna potomne są niejako niezależne od okna głównego. Okna potobne mogą przybierać właściwość modalności lub niemoralności. Otwarte okno potomne w trymie modalności blokuje dostęp do okna głównego dopóki okno potomne nie zostanie zamknięte.

MDI (Multiple Dokument Interface) – Okno główne jest w tym przypadku swego rodzaju pojemnikiem okien potomnych. Najlepszym przykładem aplikacji MDI są edytory tekstów, które potrafią wyświetlać naraz wiele dokumentów.

Visual Studio pozwala na projektowanie aplikacji zarówno SDI jak i MDI. Co prawda wybór typu aplikacji zależy wyłącznie od programisty, to jednak, w większości przypadków, będziesz tworzyć aplikacje SDI.

Aplikacja SDI

Aplikacja SDI, to taka aplikacja, która może zawierać wiele okien, jednak okna te są wyświeltane niejako samodzielnie, pojedynczo. Przykład:

  1. Utwórz nowy projekt i nadaj mu dowolną nazwę. My nazwaliśmy nasz przykład WieloformatkowySDI,
  2. Zmień właściwości okna głównego: StartPosition – Screen Center,
  3. Wstaw do projektu komponent menuStrip i dodaj opcję menu – Nowe okno,
  4. Dodaj do projektu nowe okno (Projekt->Dodaj formularz windows forms). Nazwij go po prostu – okno.cs,
  5. Przejdź teraz do formularza pierwszego i otwórz zdarzenie dla elementu menu Nowe okno klikając na nim podwójnie. Teraz musimy zaprogramować akcję dla zdarzenia:
 private void button1_Click(object sender, EventArgs e)
        {
            okno okienko_potomne = new okno();            
            okienko_potomne.Show();
        }

Uruchom teraz program klawiszem F5 i spróbuj otworzyć kilka okien naraz. Jednak niektóre okna powinny być wyświetlane modalnie, co oznacza, że po ich otwarciu, program powinien umiemożliwić otwieranie kolejnych czy pracę do czasu jego zamknięcia. W tym celu nalezy zmodyfikować metodę wywołania okna z Show(), na ShowDialog();

Przykład aplikacji MDI

Przyjrzyjmy się teraz bliżej tworzeniu aplikacji MDI. W zasadzie tworznie aplikacji MDI nie różni się znacząco od tworzenia aplikacji SDI. Różnica tkwi jedynie w formularzu głównym oraz dodatkowej linii kodu okienko_potomne.MdiParent = this;, który informuje okno potomne o jego oknie – rodzicu. Oczywiście istnieje możliwość zbudowania dowolnej aplikacji MDI, to jednak w tej książce przyjmujemy, że aplikacje tego typu wykorzystujemy to tworzenia wyłącznie edytorów tekstów.

  1. Utwórz nowy projekt i nadaj mu dowolną nazwę. My nazwaliśmy nasz przykład WieloformatkowyMDI,
  2. Zmień właściwości okna głównego: StartPosition – Screen Center oraz IsMdiContainer – true,
  3. Wstaw do projektu komponent menuStrip i dodaj opcję menu – Nowe okno,
  4. Dodaj do projektu nowe okno (Projekt->Dodaj formularz windows forms). Nazwij go po prostu – okno.cs,
  5. W nowym oknie wmieść komponent ListBox,
  6. Zmień właściwości komponentu ListBox: multiline – true, Dock – fill, aby komponent wypełnił całę okno,
  7. Przejdź teraz do formularza pierwszego i otwórz zdarzenie dla elementu menu Nowe okno klikając na nim podwójnie. Teraz musimy zaprogramować akcję dla zdarzenia:
private void noweOknoToolStripMenuItem_Click(object sender, EventArgs e)
  {
   okno okienko_potomne = new okno();
   okienko_potomne.MdiParent = this;
   okienko_potomne.Show();
  }

Uruchom teraz program klawiszem F5 i spróbuj otworzyć kilka okien naraz.
mdi1_gtcvwk
Jak widzisz, niewielkim nakładem sił utworzyłeś prosty edytor tekstowy, który umożliwia wyświetlanie wielu elementów. Oczywiście wiele elementów nie zostało do projektu dodane. Mamy nadzieję, że po przeczytaniu niniejszego opracowania, będziesz w stanie rozbudować ten przykład do pełnowartościowego edytora tekstów. W dalszej części dowiesz się, jak wykorzystać tę wiedzę w praktyce.

502total visits,1visits today

Tagi , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

42 + = 48

This site uses Akismet to reduce spam. Learn how your comment data is processed.