[ johnnyc @ 22.03.2009. 19:28 ] @
Pozdrav,

Jedno pocetnicko pitanje...

Kreirao sam novi C# projekat, i razvijam ekransku formu. Ime fajla je naravno Form1.cs.

U taj projekat dodao sam novu klasu (Class1.cs), i ono sto zelim je da iz te klase kontrolisem formu (Form1.cs) i kontrole koje su na njoj. Za sada mi to ne polazi za rukom.


Da li mozete da mi objasnite kako da to ostvarim? Predpostavljam da treba negde da postavim da je Form1 public ili internal ili slicno?

Hvala unapred!
[ IvanBeograd @ 22.03.2009. 20:44 ] @
U toj fajlu Class1.cs namestis npr namespace MojNameSpace,....,i sve ostalo,klase,metode,tj sta ti je potrebno.
A u form1.cs ukljucis gore tvoj namespace using MojNameSpace.I to ti je to.
[ johnnyc @ 22.03.2009. 21:09 ] @
Pazi ovako...

Form1.css

Code:

using System;
.....
using pop3;

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



Class1.css:
Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using pop3;

namespace pop3
{
    class Class1
    {

        public void test()
        {
            Form1.listBox1.Items.Add("esec"); // ovde vraca gresku 'pop3.Form1.listBox1' is inaccessible due to its protection level

        }
    }
}




Da li mozes da mi pomognes i da mi kazes gde gresim?

[ Igor Gajic @ 22.03.2009. 21:55 ] @
Polje listBox1 ti je private i ne mozes mu pristupiti.

Mozes polja koja menjas deklarisati kao public (pogledaj pod Modifiers u Properties) i pristupati im iz drugih klasa.
[ johnnyc @ 23.03.2009. 08:08 ] @
Promenuo sam, ali sada dobijam

Code:

Error    1    An object reference is required for the non-static field, method, or property 'pop3.Form1.textBox3'



Predpostavljam da u Class1.cs treba da napravim klasu, ali ne znam koju. Ili na neki drugi nacin treba da referenciram komponentu na Form1.cs.


Moze pomoc? Hvala unapred!


J.
[ johnnyc @ 23.03.2009. 08:29 ] @
Jos nesto... Malo sam izmenjao code...

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using pop3;

namespace pop3
{
    public class Class1 : Form1 // ovde sam dodao : Form1
    {

        public void test()
        {
            Console.WriteLine("ispisujemo u konzoli...."); // ovo se ispise u command promptu
            listBox1.Items.Add("ubacujemo u listbox"); // ovo se ne desava, listBox1 ostaje prazan

        }
    }
}



Iskomentarisao sam izmene u samom codeu, mozda moze da pomogne.

Jos jednom hvala unapred!
[ Igor Gajic @ 23.03.2009. 09:21 ] @
Ti pokusavas da preko definicije klase promenis promenjivu u INSTANCI klase. To mozes da uradis samo ako su polja definisana kao static.
Druga stvar:

Code:

  public class Class1 : Form1 // ovde sam dodao : Form1


Ovako ti nasledjujes klasu Form1 i to ce se iskompajlirati ali to nije to sto tebi treba.





Fora je u ovome:

Code:


Form1 f1=new Form1();

// da bi izmenio promenjivu u f1 pises:

   f1.listBox1.Items.Add("ubacujemo u listbox");

// ti pokusavas sledece:

   Form1.listBox1.Items.Add("ubacujemo u listbox");





Probaj ovako da napises Class1:

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using pop3;

namespace pop3
{
    public class Class1 
    {
        Form1 forma;


        public Class1(Form1 f1)
       {
           forma=f1;
        }

        public void test()
        {
            Console.WriteLine("ispisujemo u konzoli...."); // ovo se ispise u command promptu
            forma.listBox1.Items.Add("ubacujemo u listbox"); // ovo se ne desava, listBox1 ostaje prazan

        }
    }
}


Dakle prosledjujes konstruktoru Class1 referencu na formu koju hoces da menjas i onda mozes da menjas tu formu po zelji. Obrati paznju da je listView1 public polje. Ako hoces da menjas nesto drugo unutar forme onda moras da deklarises to polje kao public ili da koristis refleksiju.

[ IvanBeograd @ 23.03.2009. 09:35 ] @
U class.cs napises nesto npr ovako

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Proba_Za_Klasu; // za form.cs

namespace MojaKlasa
{
    class Class1
    {
        public void ChangeSomeShitOnForm(ListBox lb)
        {
            lb.Items.Add("Hello");
        }
    
    }
}


form.cs

Code:

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

namespace Proba_Za_Klasu
{
    public partial class Form1 : Form
    {
        MojaKlasa.Class1 mc = new Class1();

        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            mc.ChangeSomeShitOnForm(listBox1);
        }
    }
}


Probao sam radi.
[ johnnyc @ 23.03.2009. 09:55 ] @
To je to, hvala obojici
:-)