Referencja miedzy formularzami ...

0

Witam na wstepie chce zaznaczyc ze przeczytalem wszystkie mozliwe tematy zwiazane z moim problemem lecz nie rozwialy one moich watpliwosci.

Posiadam 2 formularze. Pierwszy zawiera m.in obiekt NowaOsoba klasy Osoba oraz przycisk Dodaj ktorego funkcja wyglada tak

        void Dodaj_Click(object sender, EventArgs e)
        {
            Button Dodaj= (Button)sender;
            Form DodajOsobe = new DodajForm(ref NowaOsoba);
            DodajOsobe.ShowDialog();
            DodajOsobe.Dispose();
            ListaOsob.Add(new Osoba(NowaOsoba.rID(), NowaOsoba.rTelefon()));
        }

Tworze nowy formularz "DodajOsobe" przez konstruktor z referencją na obiekt NowaOsoba, ktory zawiera pola tekstowe i przycisk OK.

    class DodajForm : Form
    {  
        // ...
        //Pozostale elementy ...
        //...
        public Osoba Nowa;
        public DodajForm(ref Osoba NowaOsoba)
          {
            /// reszta kodu ...
          }
        void OK_Click(object sender, EventArgs e)
          {
             // Kod znajduje sie ponizej
          }
     }

Nastepnie uzytkownik wypelnia pola i wciska przycisk OK.

        void OK_Click(object sender, EventArgs e)
        {
            Button OK = (Button)sender;
           Nowa = new Osoba(tID.Text, tTelefon.Text);
           NowaOsoba = Nowa;
           this.Close();
           
        }

Jak widac chce w nim przypisac obiekt Nowa ktrory jest obiektem publicznym nowego formularza do tej referencji NowaOsoba. Wyskakuje blad "The name 'NowaOsoba' does not exist in the current context" .

0

A czy przypadkiem trzymasz gdzieś "ref Osoba NowaOsoba"?
A po drugie, czy nie lepiej zrobić coś takiego:

       
public new Osoba ShowDialog()
        {
            base.ShowDialog();
            return new Osoba(tID.Text, tTelefon.Text);
        }

i nie bawić się w referencje?

0
adam1105 napisał(a)

A czy przypadkiem trzymasz gdzieś "ref Osoba NowaOsoba"?
A po drugie, czy nie lepiej zrobić coś takiego:

public new Osoba ShowDialog()
{
base.ShowDialog();
return new Osoba(tID.Text, tTelefon.Text);
}

> i nie bawić się w referencje?


gdzie dokladniej taka funkcja powinna sie znalezc?


> A czy przypadkiem trzymasz gdzieś "ref Osoba NowaOsoba"?

Przekazuje referencja do nowego formularza, a potem w obsludze przycisku do referencji chce przypisac nowopowstały obiekt ...
0

ShowDialog powinien znaleźć się w klasie DodajForm. Wtedy OK_Click powinna tylko zamykać formularz. I nie potrzebna już jest żonglerka referencjami. Wtedy Dodaj_Click wyglądałoby tak:

void Dodaj_Click(object sender, EventArgs e)
        {
            Form DodajOsobe = new DodajForm();
            Osoba o = DodajOsobe.ShowDialog();
            DodajOsobe.Dispose();
            ListaOsob.Add(new Osoba(o.rID(), o.rTelefon()));
        }

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