Przekazywanie parametru z Form2() do Form1()

Przekazywanie parametru z Form2() do Form1()
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

Po pierwsze co ma wspólnego: Form2 f2 = new Form2(cal);
z: public ObliczGranice(double wspa,double zm_x,double wspb,double przec,double wartgr,double dziedz,calosc c) ?

To wygląda na cześć przekazania jakiegoś parametru do zupełnie innej formy,tylko że nie pokazałeś ani deklaracji tej zmiennej cal ani jej inicjalizacji.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
_13th_Dragon napisał(a):

Po pierwsze co ma wspólnego: Form2 f2 = new Form2(cal);
z: public ObliczGranice(double wspa,double zm_x,double wspb,double przec,double wartgr,double dziedz,calosc c) ?

To wygląda na cześć przekazania jakiegoś parametru do zupełnie innej formy,tylko że nie pokazałeś ani deklaracji tej zmiennej cal ani jej inicjalizacji.

Okej już wszystko wrzucam tak, jak mam:
To jest event w głównej formie:

Kopiuj
 
private void oblicz_granice_funkcji_liniowej_Click(object sender, EventArgs e)
        {
            panel_funkcji_liniowej.Enabled = false;
            var cal = new calosc();
            var ob = new ObliczGranice(wspolczynnik_a_funkcji_liniowej, zmienna_x_funkcji_liniowej, wspolczynnik_b_funkcji_liniowej, przeciwdziedzina_funkcji_liniowej, wartosc_granicy_funkcji_liniowej, dziedzina_funkcji_liniowej,cal);

             wspolczynnik_a_funkcji_liniowej = ObliczGranice.wspol_a;
            dziedzina_funkcji_liniowej = ObliczGranice.dziedzina;
            wspolczynnik_b_funkcji_liniowej = ObliczGranice.wspol_b;
            zmienna_x_funkcji_liniowej = ObliczGranice.zmienna_x;
            ob.Show();
            ob.FormClosed += (o, args) => panel_funkcji_liniowej.Enabled = true;
        }

A to jest kod drugiej formy. Sory za dziwaczne nazwy, ale robiłem na szybko:

Kopiuj
 
public partial class ObliczGranice : Form
    {
        public static double wspol_a,zmienna_x,wspol_b,przeciwd,wartosc_gr,dziedzina;
        private calosc cal;
        public ObliczGranice(double wspa,double zm_x,double wspb,double przec,double wartgr,double dziedz, calosc c)
        {
            InitializeComponent();
            wspol_a = wspa;
            zmienna_x = zm_x;
            wspol_b = wspb;
            przeciwd = przec;
            wartosc_gr = wartgr;
            dziedzina = dziedz;
            this.cal = c;
            this.SetAutoSizeMode(System.Windows.Forms.AutoSizeMode.GrowAndShrink);
        }
        
        private void granica_w_punkcie_wybor_btn_Click(object sender, EventArgs e)
        {
           
            
           
            cal.DrawCh();

            cal.Show();
           
            this.Close();
        }

A to jest tresc DrawCh():

Kopiuj
public void DrawCh()
       { 
           this.wykres_funkcja_liniowa.Series["wykres"].Points.Clear();
            this.wykres_funkcja_liniowa.Series["granica"].Points.Clear();
            for (ObliczGranice.dziedzina = ObliczGranice.zmienna_x - 20; ObliczGranice.dziedzina < ObliczGranice.zmienna_x + 20; ObliczGranice.dziedzina++)
            {
                ObliczGranice.przeciwd = ObliczGranice.wspol_a * ObliczGranice.dziedzina + ObliczGranice.wspol_b;
                this.wykres_funkcja_liniowa.Series["wykres"].Points.AddXY(ObliczGranice.dziedzina, ObliczGranice.przeciwd);
            }
            ObliczGranice.wartosc_gr = ObliczGranice.wspol_a * ObliczGranice.zmienna_x + ObliczGranice.wspol_b;
            this.wykres_funkcja_liniowa.Series["granica"].Points.AddXY(ObliczGranice.zmienna_x, ObliczGranice.wartosc_gr);
            this.wykres_funkcja_liniowa.Series["granica"].Points[0].Color = Color.Red;
            this.wykres_funkcja_liniowa.Series["granica"].Points[0].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
       }
 
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

To straszne, wróć do początków, do jakiegoś kursu, bo masz kompletne braki podstaw z podstaw:

  • Nie rozumiesz różnicy pomiędzy klasą a obiektem.
  • Nie rozumiesz różnicy pomiędzy składową zwykłą a składową statyczną.
  • Nie rozumiesz jak działa metoda Show();
  • Nie rozumiesz jak działa metoda Close();
    No chyba że wymarudzisz od kogoś wiersz po wierszu - gotowca.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
_13th_Dragon napisał(a):

To straszne, wróć do początków, do jakiegoś kursu, bo masz kompletne braki podstaw z podstaw:

  • Nie rozumiesz różnicy pomiędzy klasą a obiektem.
  • Nie rozumiesz różnicy pomiędzy składową zwykłą a składową statyczną.
  • Nie rozumiesz jak działa metoda Show();
  • Nie rozumiesz jak działa metoda Close();
    No chyba że wymarudzisz od kogoś wiersz po wierszu - gotowca.

Składowa zwykła to ta, która jest dostępna przez obiekt. Składowa statyczna to ta, która jest dostępna przez klasę. Czyli jednak rozumiem różnice.
Klasa to coś w rodzaju typu, a obiekt to coś w rodzaju egzemplarza klasy.
O Show i Close rzeczywiście mało czytałem. Wydawało mi się, że show wyświetla formę a close zamyka ją.
Myślę więc, że problem nie polega na tym, że nie rozumiem tych wszystkich rzeczy, tylko mam kłopot z przeniesieniem teorii na praktykę.

Ale oczywiście spojrzę w książkę, którą mam i przeczytam o OP jeszcze raz. Jak nie pomoże to na pewno nie zaszkodzi.

edytowany 2x, ostatnio: finito
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

To czytaj to co napisałeś dopóki nie załapiesz tej różnicy.
Kiedy załapiesz różnicę to sam pomysł, stworzenia obiektu tylko po to by wypełnił w konstruktorze swoje statyczne składowe i odpalił metodę z innej klasy będzie napawać cię przerażeniem.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
_13th_Dragon napisał(a):

To czytaj to co napisałeś dopóki nie załapiesz tej różnicy.
Kiedy załapiesz różnicę to sam pomysł, stworzenia obiektu tylko po to by wypełnił w konstruktorze swoje statyczne składowe i odpalił metodę z innej klasy będzie napawać cię przerażeniem.

No ja od początku wiedziałem, że to głupota, ale tak mnie naprowadziliście. Ja też uważam, że stworzenie obiektu tylko po to, żeby go upchnąć w konstruktorze innej klasy to co najmniej porąbane.
Jednak gdy tego nie robię, to wypluwa mnie z programu.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

Sledze temat, nikt na takie bzdury cię tu nie naprowadzał.
Ale może ci tak się wydawać ze wzgłedu na brak podstaw z podstaw.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
_13th_Dragon napisał(a):

Odpowiedź na to pytanie udzielił ci @xeo545x39 w pierwszym poście tego tematu: http://4programmers.net/Forum/970821

_13th_Dragon napisał(a):

To czytaj to co napisałeś dopóki nie załapiesz tej różnicy.
Kiedy załapiesz różnicę to sam pomysł, stworzenia obiektu tylko po to by wypełnił w konstruktorze swoje statyczne składowe i odpalił metodę z innej klasy będzie napawać cię przerażeniem.

Przecież gdzieś muszę mieć tę instancję, żeby ją przekazać, nie? Jeśli mam inst typu priv w drugiej klasie, a konstruktor odpalam w klasie głównej, to skądś muszę wyczarować tę instancję. A gdy zrobiłem tak, jak mam podane w linku ("górny cytat") - dokładnie tak samo - to mnie wypluwa z programu i dostaję informację, że instancja głównej klasy jest pusta.

edytowany 1x, ostatnio: finito
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
1
finito napisał(a):

A gdy zrobiłem tak, jak mam podane w linku ("górny cytat") - dokładnie tak samo - to mnie wypluwa z programu i dostaję informację, że instancja głównej klasy jest pusta.
Ponieważ źle to robisz, zresztą wszystko źle robisz. Wróć do kursu, po kursie może wystarczy że przeczytasz temat i już będziesz wiedział o co chodzi.
Bo jak na razie zwyczajnie nie jesteś w stanie zrozumieć nikogo kto próbował ci pomóc, ze względu na braki w podstawach z podstaw.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Zobacz pozostały 1 komentarz
FI
A tak swoją drogą dzięki za to, że poświęciliście mi czas. Dragon, zdopingowałeś mnie.
_13th_Dragon
Po to tu jestem ;P Ewentualnie odstraszam tych których nie udaje się zdopingować :)
FI
Nie mam najmniejszego zamiaru się poddawać. A twoje posty wystraszyły mnie jak młodego chirurga, który się dowiedział od doświadczonego, że nawet krwi nie potrafi pobrać. Ja bym nie chciał trafić pod nóż takiego żółtodzioba. Bo niby coś wiem, a wygląda na to, że g**no wiem i g**no rozumiem.
_13th_Dragon
Jak masz świadomość: - "... g**no wiem i g**no rozumiem ..." - to jesteś na dobrej drodze: - google: efekt krugera-dunninga : grafika
FI
Doczytałem o co chodzi z tym duningiem;-)))))))))
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
xeo545x39 napisał(a):

Potrzebujesz referencji formy 1 na formie 2. Utwórz pole typu formy 1 i w konstruktorze formy 2 przekaż tę pierwszą. Dalej to tylko w evencie przycisku na formie drugiej (kiedy zamykasz) wklepujesz kod tak aby pozmieniać dane w formie 1.

Kopiuj
// w formie 2
Form1 form1;

Form2(Form1 form)
{
    this.form1 = form;
}

// w evencie
form1.[...]; // itd.

Przepraszam, ale - już tak się nie upierając zupełnie - czym różni się kod wyżej od mojego? Oczywiście poza słowem partial,static i tymi wszystkimi dodatkowymi parametrami.

Kopiuj
 
public partial class ObliczGranice : Form
    {
        public static double wspol_a,zmienna_x,wspol_b,przeciwd,wartosc_gr,dziedzina;
        private calosc cal;
        public ObliczGranice(double wspa,double zm_x,double wspb,double przec,double wartgr,double dziedz, calosc c)
        {
            InitializeComponent();
            wspol_a = wspa;
            zmienna_x = zm_x;
            wspol_b = wspb;
            przeciwd = przec;
            wartosc_gr = wartgr;
            dziedzina = dziedz;
            this.cal = c;
            this.SetAutoSizeMode(System.Windows.Forms.AutoSizeMode.GrowAndShrink);
        }
event:
cal.[...]
SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
0

Pomijając wszystkie dodatkowe parametry i patrząc tylko na przekazanie formy do innej formy to niczym.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

Dostałeś odpowiedź tu: http://4programmers.net/Forum/1240098 nie licząc bezsensownych statyków ta część jest wykonana.
Ale nie pokazałeś jak tworzysz obiekt ObliczGranice co przekazujesz jako ostatni parametr?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
SO
Wcześniej pokazał, że przekazuje tam new calosc()...
_13th_Dragon
ale to mu już wytłumaczyłem, na przykładzie z Show();
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
some_ONE napisał(a):

Pomijając wszystkie dodatkowe parametry i patrząc tylko na przekazanie formy do innej formy to niczym.

No właśnie. Co mam w takim razie teraz zrobić - skoro tworzenie w klasie głównej instancji tej klasy (var cal = new calosc()) jest zdaniem Dragona straszne? Przecież jeżeli przykład tamtego kolegi (xeo545x39), który zacytowałem, jest poprawny, to przy wywołaniu konstruktora drugiej klasy w klasie głównej, skądś trzeba wziąć tę instancję cal. Sama się nie urodzi. Jeżeli jednak jest to "straszne", to nic już nie wiem.

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
2

Tą instancję formy głównej trzeba wziąć z this...

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 dni
  • Postów:684
0
some_ONE napisał(a):

Tą instancję formy głównej trzeba wziąć z this...

Dzięki. Działa. Nie rozumiem jednak czemu wobec tego Dragon mnie tak zjechał, skoro nie wziąłem pod uwagę jedynie tego (choć to było bardzo ważne), że w konstruktorze trzeba było dać w ostatnim parametrze jedno durne słowo this. I teraz wszystko chodzi cacy.

Ale okej Dragon, powtórka z OP mi się mimo wszystko przyda.

SO
No bo to co robiłeś nie miało żadnego sensu i tylko pokazywało, że masz braki w totalnych podstawach. Chciałeś, żeby w form2 znajdowała się główna instancja form1, więc do konstruktora przekazywałeś NOWĄ instancję form1. Gdzie tu logika?
FI
Oczywiście, zgadzam się i intuicja mi to podpowiadała . Jakbym wpadł sam, że chodzi o to jedno słowo this, które przecież wskazuje na egzemplarz obiektu oraz na to, że trzeba to słowo dać w odpowiednim miejscu, to bym tak nie błądził jak ostatni dureń.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 dni
0

Bo myślałem że jak new tworzy nową to trzeba użyć starą a jedyne odwołanie do starej to this zaś jeżeli o this nie słyszałeś to słusznie zjechałem - wracaj do jakichś podstaw z podstaw.
Poza tym większość zjechania polega na użyciu zmiennych statycznych w każdej dziurze, włącznie z iteratorem pętli!


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
FI
Więc mówiłem, że nie chodzi o brak teorii tylko praktykę. O słowie this słyszałem 1000 razy i o tym do czego służy. Jak przeczytałem fragment mojej książki do c# nie było tam niczego o klasach i obiektach, czego bym nie wiedział. Oczywiście przeczytam sobie wszystko jeszcze raz, a za zjechanie...no cóż...co nie zabija to wzmacnia, więc i za to dziękuję. Spokojnej nocy;-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.