[c# / Compact Framework] Problem z właświością Owner

Odpowiedz Nowy wątek
2010-08-28 20:57

Rejestracja: 13 lat temu

Ostatnio: 9 lat temu

0

Witam wszystkich,
z góry przepraszam jeżeli wybrałem zły dział na ten wątek do rzeczy...

piszę aplikację na urządzenie mobilne w środowisku compact framework. Program składa się dwóch formów: Form1 i Form2, każdy z formów zawiera przycisk do przełączania się między tymi formami, chcę ażeby poprzez naciśnięcie na przycisk bieżący form się schował a pokazał drugi(wcześniej schowany). Napisałem kod w taki sposób ażeby za każdym razem otwierać(pokazywać) istniejącą instancje forma a nie tworzyć za każdym naciśnięciem na przycisk nowe instancje tej samej formatki, postanowiłem więc skorzystać z właściwości Owner.
Kod:

//Form 1:
public partial class Form1 : Form
{
  private Form2 form2 = new Form2();

  private void buttonOpenForm2_Click(object sender, EventArgs e)
  {
       form2.Owner = this;
       form2.ShowDialog();
   }
}

//Form 2: 
public partial class Form2 : Form
{
 private void Form2_Load(object sender, EventArgs e)
 {
      this.Owner.Hide();     //chowam okno właściciela czyli Form1 i tu wszystko jest ok!
  }

  private void buttonOpenForm1_Click(object sender, EventArgs e)
  {
       this.Owner.ShowDialog(); //tutaj program się wysypuje
  }
}

Problem jak wyżej w kodzie, podczas obsługi zdarzenia przycisku znajdującego się na Form2 zostaje zgłoszony wyjątek, co jest o tyle wg mnie dziwne, że przy wywoływaniu metody Hide dla tej samej właściwości Owner wszystko działa dobrze. Może ktoś spotkał się z podobnym problemem? Proszę o pomoc.

Pozostało 580 znaków

2010-08-28 22:34

Rejestracja: 17 lat temu

Ostatnio: 14 minut temu

Lokalizacja: Gród Króla Kraka

0

Scenariusz jest taki: tworzysz Formę1, klikasz "Otwórz Formę2", pokazuje się modalne okno Formy2. W tymże modalnym oknie próbujesz pokazać również modalnie Form1, co sie udać nie może ;)
Może spróbuj zwyczajnego Show, niemodalnego?


Hey ho!

Pozostało 580 znaków

2010-08-29 00:04

Rejestracja: 13 lat temu

Ostatnio: 9 lat temu

0

Też już próbowałem użyć Show zamiast ShowDialog wtedy niestety program tez nie działa poprawnie, co prawda nie jest już zgłaszany wyjątek, ale po kliknięciu na przycisk nic się nie dzieje - jest tak jak gdyby button nie miał przypisanej obsługi zdarzenia po jego naciśnięciu choć de facto kod jest wykonywany(sprawdzałem w debugerze). Naciśnięcie przycisku na Form1 powoduje ukazanie się Form2, natomiast powrót do Form1 jest już nie możliwy pomimo tego, że form1 jest przechowywany we właściwości Owner (form'a2).

EDIT: problem rozwiązany - z oknem modalnym kubARek miałeś jak najbardziej rację, natomiast wywoływanie metody this.Owner.Show z form2 działa, tyle że w kodzie nie chowałem bieżącej formatki(form2) i pewnie dlatego przysłaniała ona wywołany form1, jednakże jest to dla mnie zastanawiające dlaczego okno właściciela nie przysłania okna dziecka? Poniżej przedstawiam działający kod, może się to komuś przyda z uwagi na to, że w internecie pełno jest przykładów jak tworzyć po kliknięciu na przycisk za każdym razem nową instancję form'a a przykładów jak odwoływać się już do istniejących instancji okna jest jak na lekarstwo.

//Form1:
    public partial class Form1 : Form
    {
        Form2 form2 = new Form2();

        private void button1_Click(object sender, EventArgs e)
        {
            form2.Owner = this;
            form2.Show();
            this.Hide();
        }
    }

//Form2:
    public partial class Form2 : Form
    {

        private void button1_Click(object sender, EventArgs e)
        {
            this.Owner.Show();
            this.Hide();
        }
    }

Jak widać powyżej kod jest banalny, ehh i pomyśleć, że straciłem na to cały dzień. Dzięki kubARek za naprowadzenie mnie na dobrą drogę.

Pozostało 580 znaków

Odpowiedz

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