Zmienne, obiekty, tablice, listy itp. widoczne globalnie

0

Mam od jakiegoś czasu problem (teraz w C# , ale wcześniej również w Javie) :
Jak zadeklarować zmienną aby była widoczna w innej klasie ? Konkretnie problem wygląda tak: mam w Form1 zadeklarowaną listę:

 List<Skoczek> s = new List <Skoczek>();

i teraz chcę dodawać obiekty (zmieniać wartości ich pól) po naciśnięciu buttona w Form2, ale niestety jest to niemożliwe. W jaki sposób zadeklarować tę listę "globalnie" ?
Bardzo proszę o pomoc :)

0

Każdy obiekt Form1, a może ich być np. tysiąc, ma swoją oddzielną List<Skoczek>. Do którego z tysiąca obiektów ma się niby odnosić globalna lista?

Jeśli chcesz mieć po ludzku, to zrób w Form1 publiczne metody DodajSkoczka, EdytujSkoczka, UsuńSkoczka która będą operowały na Twoim List<Skoczek>. A konstruktor Form2 niech przyjmuje argument typu Form1, i ustawi go sobie w jakimś polu. Wówczas w obiekcie typu Form2 będziesz miał dostęp do tych metod z Form1, które Cię interesują.

0

w konstruktorze klasy Skoczek mam:

  
public Skoczek(String a, String b, String c)
        {
            this.imie = a;
            this.nazwisko = b;
            this.kraj = c;
            
       }

w Form 1 mam metode:

public void DodajSkoczka(String a,String b,String c)
        {
            s.Add(new Skoczek(a,b,c));
        } 

a po naciśnięciu buttona w Form2:

private void button1_Click(object sender, EventArgs e)
        {
           Form1.DodajSkoczka(textBox1.Text, textBox2.Text, textBox3.Text);
        } 

i niestety ale niedziała :(. To ostatnie jest całe podrekślone i wywala błąd : "An object reference is required for the non-static field, method, or property 'Ski_Jumping_Engine.Form1.DodajSkoczka(string, string, string)'"

1

W Form2 miałeś dodać pole na obiekt klasy Form1 i ustawić je w konstruktorze Form1.

0

ok dodałem właśnie :)

public Form2(Form1 b)
        {
            InitializeComponent();
            a = b;
        }

i przy wywoływaniu Form2 dodałem argument:

Form2 f = new Form2(new Form1());

na razie działa (program się uruchamia), ale okaże się czy to jest poprawne :)

0

Ty nie chcesz chyba utworzyć nowego Form1 tylko przekazać referencję do tego okna, które masz już widoczne. Więc Form2 f = new Form2(this);.

0

no tak racja :) bo wcześniej wpisywałem tam po prostu Form1 i nie pasowało

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