Kilkukrotne otwieranie formy

0

Witam. Chciałbym zapytać jak zrobić aby otwierać Formę 2 więcej niż 1 raz?, daję taki kod na początku

Form2 f2 = new Form2();

i w buttonie f2.show();

, lecz jak wyłączę tą drugą formę i spróbuję ją włączyć jeszcze raz to wyskakuje taki błąd <code class="csharp">Cannot access a disposed object. Object name: 'Form2'.

. Próbowałem także Form2 f2 = new Form2(); wrzucić do buttona i działa, lecz nie mogę z formy pierwszej podmienić danych w formie drugiej. Proszę o pomoc jeżeli ktoś wie o co mi chodzi. Pozdrawiam !

0
Form2 f2;
...
void buttonCośtam_Click(object sender, EventArgs e)
{
    this.f2 = new Form2();
    this.f2.Show();
}
0

Bardzo dziękuje, działa jak należy ale da się jakoś zrobić aby to co wpisze z formy 1 do formy 2 zostało zapisane i nie usuwało się po wyłączeniu formy 2?. Bo jest tak : włączę formę 2, zmienię coś w niej poprzez this.f2.listview1... i oczywiście zmienia, lecz jak wyłączę forme 2 i włączę to ta zmiana znika. Jest na to jakiś sposób?

1

Tak, musisz to oprogramować.
Np. tak: tworzysz sobie jakąś klasę przechowującą zapisane dane z tej Form2(btw. nazywaj klasy i zmienne sensownie, bo nazwa Form2 to jest żadna nazwa). W momencie tworzenia Form2 przekazujesz jej obiekt tej klasy z zapisanymi informacjami(np. w konstruktorze) i w tej Form2 ustawiasz wszystko tak jak wskazuje ten obiekt z zapisanymi danymi.

1

No pewnie że znika, przecież to już nie ta sama forma (a jedynie taka sama). Trzeba albo przesyłać dane z formy 2 do formy 1 (najlepiej przez eventa, ostatecznie przez referencję do Form1 podaną w konstruktorze formy 2) albo nie tworzyć nowej za każdym razem (ale nie sprawdzałem czy raz zamkniętą formę można drugi raz otworzyć).

0

Nie wiem czy dobrze zrozumiałem. W przycisku do włączenia formy (jeszcze przed włączeniem formy) dać te zmienne które mają być wprowadzone do formy 2?

0

nie w przycisku, tylko w wywołaniu konstruktora:

Form2 f2 = new Form2(zmienne, "które mają być", wprowadzone);

oczywiście konstruktor musi przyjmować takie parametry.

0

A ze stworzonej formy odwołujesz się do tej, która ją stworzyła za pomocą Owner, wpierw ją rzutując na odpowiednią klasę okna. No i zmienne muszą być publiczne.

0

Zmienne z Form 1 które mają być wprowadzone do Form 2?.

Form2 f2 = new Form2(zmienna); czy zmienna[0] itd.?

lecz gdy wprowadziłem taki kod to wyskoczył mi błąd does not contain a constructor that takes 1 arguments

. Chyba was nie za bardzo rozumiem.
1

W tym momencie okazuje się, że nie wiesz co to klasa, obiekt klasy, konstruktor. Nie znasz języka w którym usiłujesz pisać. Tak się po prostu nie da. Najpierw musisz opanować chociaż podstawy C#, a dopiero potem bawić się w okienka.

0

A jesteś w stanie pokazać o co ci chodzi?

1

Skoro nie potrafisz przekazać do konstruktora zmiennej i z niej skorzystać to nie ma to sensu. Nie znasz kompletnych podstaw, bez tej wiedzy po prostu się nie da funkcjonować w WinForms.

0

Chodzi o to?

public button(tutaj te konstruktory?)
1

Wiesz chociaż co to klasa czy konstruktor? Weź jakąś książkę do ręki, bo nikt tu Ci nie będzie robił wykładów na temat składni całego języka, no bez przesady.

0

Porządny człowiek pomógłby bez względu na to czy drugi człowiek zrozumiałby czy nie, ty nim nie jesteś. Można zamknąć temat

0

Ale ma Ci opowiedzieć o konstruktorach i programowaniu obiektowym może też? Bierzesz się za coś, o czym nie masz zielonego pojęcia i jeszcze bezczelnie masz pretensje. Weź łaskawie jakiś kurs/dokumentacje/cokolwiek i naucz się tych paru prostych rzeczy, a dopiero potem pisz coś, o czym będziesz miał jakiekolwiek pojęcie.

0

Ale co on ma ci pomagać, jak ty podstaw nie znasz? Pomoże ci tu (=da gotowy kod), to zaraz w następnej rzeczy się wyłożysz. Chcesz nauczyć się programować czy udawać?
Wstarczyłoby chociaż byś zamiast pisać kilka ostaatnich postów przeczytał co to są konstruktory...

0

Pokazać o co mu chodzi, nie proszę o uczenie mnie -.-

0
public object argument;
public Form1(object jakisArgument)
        {
            InitializeComponent();
            argument = jakisArgument;
        }

W innej formie
Form1 forma = new Form1("dupa z ciebie, nie programista");
forma.Show(this);

0

Tak trudno było to napisać?. Kultury trochę bo cie nie obraziłem, nie wiesz ile umiem to się nie odzywaj

0

Nigdy tego nie potrzebowałem to nie mam pojęcia o tym.

2

Ta rozmowa nie ma sensu

1

Już pomijając znajomość języka jeszcze jednej rzeczy musisz się nauczyć - wyszukiwanie informacji. Taki temat, z takim problemem pojawia się tu pewnie średnio raz na tydzień jak nie częściej, więc chyba możesz zrozumieć, że nie każdemu musi się chcieć klepać co chwilę taki sam kod.
Dodatkowo biorąc pod uwagę, że ten problem jest związany raczej ogólnie z programowaniem obiektowym, a nie językiem, więc takie tematy są w C#, Javie itd. Postaw się teraz w naszej sytuacji jak widzisz n-ty raz to samo pytanie. Każdy ma ograniczoną cierpliwość.

0

To już jak nudzą cię takie tematy możesz napisać, że takie coś było lub dać link do podobnego tematu. Nie siedzę na tym forum całymi dniami i nie wiem kto co pisze i czego mu trzeba

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