Akcesor get i set - problem z wywolaniem

0

Witam. Mam problem z odczytaniem wartości poprzez akcesor get.

Mam forme ZlecForm.cs i klase Klasa.cs i chce odczytac wartosc z label1 i przekazac ja metodzie w klasie Program

class Klasa {

    public void metoda()
    {

        FormZlec formZlec = new FormZlec();

        MessageBox.Show("To jest wartosc wywolywana przez metode "+formZlec.f_idZlecStr);

}}

public partial class FormZlec : Form
{
...

private string zm_idZlecStr = "";

    public string f_idZlecStr
   {
        get { return zm_idZlecStr; }
        set { zm_idZlecStr = value; }
    }
                    

private void FormZlec_Load(object sender, EventArgs e)
{
this.f_idZlecStr = this.idZleceniodawcyLabel1.Text;
MessageBox.Show("To jest wartosc wywolywana w Formie "+this.f_idZlecStr); // tutaj wyswietla wartosc
Klasa klasa = new Klasa();
klasa.metoda(); // tutaj wartosc jest pusta
}
}

Nie mogę odczytać wartości w metodzie w klasie Klasa. Co jest nie tak ?

0

W metoda() tworzysz nowy obiekt FormZlec, więc wartości jego właściwości są puste.

0

W metodzie metoda() tworzysz nową instancję (obiekt) klasy FormZlec. Będzie to obiekt zupełnie nowy, niezależny od (wirtualnego) obiektu "this", którego używasz w obsłudze zdarzenia Load. To do innego obiektu przypisanie this.f_idZlecStr = i tak dalej się odnosi. Po stworzeniu nowego obiektu klasy FormZlec domyślną wartością jest przecież pusty string.

Jeżeli chcesz operować na jednym obiekcie klasy FormZlec, trzeba przekazać gdzieś referencję do tego obiektu, np. tak:

class Klasa
{
    public void metoda(FormZlec f)
    {
        MessageBox.Show(f.f_idZlecStr);
    }
}

oraz

private void FormZlec_Load(object sender, EventArgs e)
{
    this.f_idZlecStr = this.idZleceniodawcyLabel1.Text;
    MessageBox.Show("To jest wartosc wywolywana w Formie "+this.f_idZlecStr); // tutaj wyswietla wartosc
    
    Klasa klasa = new Klasa();
    klasa.metoda(this);
}

Gdzie jednak chyba lepszą wersją byłoby przekazanie obiektu na którym się operuje już w konstruktorze klasy Klasa, zapisanie do jakiejś zmiennej prywatnej i odpowiednie użycie w metodzie metoda().

0

Tzn. stworzyc obiekt w klasie FormZlec i przekazac go do konstruktora w klasie Klasa ? Jak to zrobic w kodzie ?

1

Nie, przekazać obiekt aktualny (this) klasy FormZlec w jej zdarzeniu Load do konstruktora klasy Klasa. Na przykład:

Klasa:

class Klasa
{
    private FormZlec form;

    public Klasa(FormZlec f)
    {
        this.form = f;
    }

    public void metoda()
    {
        // tutaj coś robi
    }
}

Zdarzenie:

private void FormZlec_Load(object sender, EventArgs e)
{
    this.f_idZlecStr = this.idZleceniodawcyLabel1.Text;
    MessageBox.Show("To jest wartosc wywolywana w Formie "+this.f_idZlecStr); // tutaj wyswietla wartosc
 
    Klasa klasa = new Klasa(this);
    klasa.metoda();
}

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