[ mvasicdo @ 23.11.2006. 09:47 ] @
Vjerovatno je bilo dosta odgovora na ovu temu ali meni treba neki jednostavniji odgovor posto sam pocetnik>
Kako da rijesim ovaj problem (ako se tako moze nazvati)
U jednoj formi npr. form1 imam neku promjenjivu koju dalje koristim u kodu. Klikom na dugme na form1 otvaram novu formu form2 u kojoj se nalazi textbox u kojoj treba da se ispise vrijednost promjenjive iz form1. Ako ja tu vrijednost u form2 promjenim i kliknem na dugme npr. OK, hocu da mi se promjenjivoj u form1 dodjeli ta nova vrijednost.

Kako mogu da napravim neku temp klasu npr. clsTemp koja ce mi sluziti kao "buffer" u kojoj ce mi se nalaziti promjenjive i njihove vrijednosti, ta da lako mogu da citam te vrijednosti i upisujem nove i da ih mogu citati iz razlicitih formi.

HVALA !!!
[ dusty @ 23.11.2006. 09:53 ] @
Bilo i previse

Ja bih napravio jednu baznu klasu (izvedenu iz Forms klase) u kojoj bih potrpao te promenljive sa static scopom i sve forme koje treba da koriste te promenljive bih nasledio iz te klase.
[ mvasicdo @ 23.11.2006. 10:07 ] @
Citat:
Ja bih napravio jednu baznu klasu (izvedenu iz Forms klase) u kojoj bih potrpao te promenljive sa static scopom i sve forme koje treba da koriste te promenljive bih nasledio iz te klase.


i ja bi to sigurno tako uradio, jos samo ako mozete da mi objesnite kako se to radi, mali primjer

POCETNIK
[ colke77 @ 23.11.2006. 10:21 ] @
Najprostije resenje:

U prvoj formi (Form1), odmah nakon definicije klase definises promenljivu:
Code:
public static string Promenljiva;

ja sam stavio tip "string", ti stavi ono sto ti treba

U drugoj formi (Form2) pristupas promenljivoj:
Code:
Form1.Promenljiva = ...

[ mvasicdo @ 23.11.2006. 10:38 ] @
colke77 probao sam i moze mi pomoci,
kako da to rijesim sa klasom, tj. da u jednoj klasi drzim sve promjenjime koje mi trebaju i da ih mogu koristiti iz razlicitih formi.
[ colke77 @ 23.11.2006. 10:49 ] @
Napravis novu klasu i nazoves je NovaKlasa.

U novoj klasi definises promenljive odmah nakon definicije klase
Code:

public static string prom_1;
public static int prom_2;
public static bool prom_3;


Promenljivama pristupas iz bilo koje forme
NovaKlasa.prom_1, NovaKlasa.prom_2, NovaKlasa.prom_3 ...

mnogo prosto, zar ne?
[ mvasicdo @ 23.11.2006. 10:58 ] @
vrlo jednostavno,
puno hvala
[ dusty @ 23.11.2006. 11:12 ] @
Ja sam mislio nesto kao:

Code:

// Bazna klasa koju ce ostale forme da naslede
class SharedFormBase : System.Windows.Forms{
 protected static string m_strName;//ovo je varijabla koju hoce svi :)
// .... ostalo smece

//Ovaj property je opciono, ali kod izgleda urednije :)
 public static string SomeName{
   get{ return this.m_strName;}
   set{ this.m_strName = value;}
}
}

//Primer jedne klase koja je forma
class Form1:SharedFormBase{
 //...... konstruktor, init i ostalo generisano smece od VS-a

// Metoda koja nesto radi sa tim stringom
 public void Foo(){
   this.m_strName = "Pera";
   // ili
   SomeName = "Pera";

   textBox1.Text = m_strName;
   // ili
   textBox1.Text = SomeName;
 }
}


Sigurno ima gresaka, nemoj samo copy+paste, pa da kukas Just kidding, ako treba pomoc pishi
[ mvasicdo @ 23.11.2006. 11:42 ] @
ovako izgleda kompletna klasa:
Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace EanGenerator
{
    public class clsTemp
    {
        protected static double horizontalSpacing;
        protected static double verticalSpacing;

        public clsTemp() { }

        public static double hSpecing
        {
            get { return horizontalSpacing; }
            set { horizontalSpacing = value; }
        }
        public static double vSpecing
        {
            get { return verticalSpacing; }
            set { verticalSpacing = value; }
        }
    }
}


radi mi, ali mi nije jasno zasto mi ne radi kada stavim "this"
get { return this.horizontalSpacing; }
set { this.horizontalSpacing = value; }

i onda iz drugih formi pozivam na ovaj nacin:
double d = clsTemp.hSpacing;
[ dusty @ 23.11.2006. 12:13 ] @
Sorry, my bad Na static clanice ne moze da se koristi this jer je this za clanice instance klase, a static polja se ne pripadaju instanci vec klasi i drugacije se alociraju pri pokretanju aplikacije.

Uprosteno, kada instanciras novu klasu alocira se memorija za taj objekat (ali samo za promenljive !) i unutar klase this pokazuje na tu lokaciju. Medjutim polja koje su static se ne alociraju, one su alocirane prilikom pokretanja aplikacije na 'fiksnu' lokaciju u memoriji (kako bi mogao bilo koji objekat da im pristupi) i ne zavise od adrese objekta.

Nadam se da sam uspeo da objasnim
[ mvasicdo @ 23.11.2006. 12:23 ] @
Kristalno je jasno....

HVALA TI PUNO !!!
[ west_herc @ 23.11.2006. 13:18 ] @
Evo ti nesto pa ako moze malo prouci. Ovo sam ja pravio kad sam bio tek početnik iako nisam ni sad daleko dogurao :).

---------------
KLASA testKlasa
---------------

using System;
using System.Collections.Generic;
using System.Text;

namespace test_class
{
public class testKlasa
{
public testKlasa() //Koristenje konstruktora za inicijalizaciju objekta, kojeg kasnije koristimo objekt imeobjekta = new objekt()
{
}

public int zbroj(int argument1)
{
int rezultat = argument1 + argument1;
return rezultat;
}
}
}


U klasi testKlasa definirana je metoda zbroj, koju kasniej koristimo u glavnom programu. Na ovaj
nacin mozemo definirati i ostale metode u posebnim klasama i pozivati ih kad nam trebaju.


--------
FORM1.cs
--------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test_class
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int argument2 = 4;
testKlasa testna = new testKlasa();
MessageBox.Show("Primaoc je " + testna.zbroj(argument2));
}
}
}

Jasno se vidi pozivanje konstruktora napravljene klase i koristenje metode kao i propustanje parametara kroz metodu.
[ dusty @ 23.11.2006. 14:30 ] @
@mvasicdo

Bojim se da me nisi ukapirao za ovu baznu klasu. Evo primer sta sam 'teo da kazem.