Przekazywanie parametru z Form2() do Form1()

Przekazywanie parametru z Form2() do Form1()
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: 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.

FI
  • Rejestracja: dni
  • Ostatnio: 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: dni
  • Ostatnio: 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.
FI
  • Rejestracja: dni
  • Ostatnio: 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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: 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.

FI
  • Rejestracja: dni
  • Ostatnio: 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: dni
  • Ostatnio: 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.

FI
  • Rejestracja: dni
  • Ostatnio: 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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: 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.

FI
  • Rejestracja: dni
  • Ostatnio: 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: dni
  • Ostatnio: dni
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: 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?

FI
  • Rejestracja: dni
  • Ostatnio: 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: dni
  • Ostatnio: dni
2

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

FI
  • Rejestracja: dni
  • Ostatnio: 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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: 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!

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.