MdiParent i ShowDialog

0

Witam!
Mam taki problem: chciałabym aby aplikacja była typu MDI. Poniższy kod w takiej formie nie działa. Dopiero jak za komentuje f.MdiParent = this;. Wiem że MdiParent i ShowDialog razem nie zadziałają, ale nie wiem jak to obejść. Potrzebuję DialogResult, ponieważ okno rodzica ma się modyfikować po zamknięciu okna dziecka.
Oto kod:

  private void btn_Nowy_Click(object sender, EventArgs e)
        {            
            Okno_Nowy f = new Okno_Nowy();
            //mdi
            f.MdiParent = this; //rodzic

            if (f.ShowDialog() == DialogResult.OK) //oczekiwanie na OK
            {
                this.Okno_Tabela_Load(sender, e); 
            }
        } 
0

albo MDI albo ShowDialog - nie da się zjeść ciastka i mieć ciastko

0

A można jakoś inaczej to obejść, aby uzyskać ten sam efekt tzn. mdi i modyfikacja okna rodzica?

0

ale jaki efekt??? Wytłumacz mi jak wg ciebie ma się zachowywać okno MDIChildren pokazane modalnie?

0

Potrzebuję DialogResult, ponieważ okno rodzica ma się modyfikować po zamknięciu okna dziecka.

Zamiast ShowDialog, otwieraj normalnie a oprogramuj zdarzenie Close tego okna.

0

Są trzy okna: OknoGlowne, TabelaPacjentow, NowyPacjent.
Najpierw jest okno główne programu (OknoGlowne), które parametr IsMdiContainer ma ustawione na true. Z jego poziomu otwieram okno Tabela pacjentów za pomocą:

 
 Okno_TabelaPacjentow f = new Okno_TabelaPacjentow();
            f.MdiParent = this;
            f.Show();

I to działa w porządku. Następnie z poziomu okna TabelaPacjentów, która w gridzie wyświetla aktualnych pacjentów, chcę otworzyć okno NowyPacjent, którego rodzicem ma być nadal te *OknoGłówne *(chcę by wszystkie formy "zagnieżdżały się w tym oknie głównym). I teraz jest ten kłopotliwy kod:

 
private void btn_NowyPacjent_Click(object sender, EventArgs e)
        {
            rejestracjaCzyGabinet = 2;
            Okno_NowyPacjent f = new Okno_NowyPacjent();
            //mdi
            f.MdiParent = this.MdiParent; //rodzic nowego okna ma być ten sam co bieżącego okna

            if (f.ShowDialog() == DialogResult.OK)
            {
                this.Okno_TabelaPacjentow_Load(sender, e);
            }
        }

Efekt który chcę uzyskać, to aby okno *NowyPacjent *"zagnieżdżało się" w oknie głównym oraz aby po zapisani nowego pacjenta (czyli zamknięciu okna NowyPacjent) zmodyfikowało się okno TabelaPacjentow (w gridzie pojawił się nowo dodany pacjent).

0
Azarien napisał(a):

Potrzebuję DialogResult, ponieważ okno rodzica ma się modyfikować po zamknięciu okna dziecka.

Zamiast ShowDialog, otwieraj normalnie a oprogramuj zdarzenie Close tego okna.

Chciałam by to wyglądało bardziej płynnie. Ale jak się nie da inaczej, to zrobię z Close.

0

no tylko, że przy takim podejściu to nikt mi nie zabroni otworzyć 1000 okien "NowyPacjent". O ile to jeszcze można uznać za dopuszczalne o tyle otwarcie 1000 okien "EdytujPacjenta" to już błąd. Jeśli już bardzo chcesz aplikację MDI to przyjęło się, że oknami MDIChildren są okna z wszelkiego rodzaju listami, zestawieniami itp, natomiast okna edycyjne (tak jak i informacyjne) są zwykłymi oknami modalnymi

1 użytkowników online, w tym zalogowanych: 0, gości: 1