Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C# rad sa formama GRESKA!

[es] :: .NET :: C# rad sa formama GRESKA!

[ Pregleda: 2238 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon C# rad sa formama GRESKA!04.04.2013. u 21:02 - pre 134 meseci
Pozdrav svima, imam problem u radu sa formama. Naime, program treba ovo da radi:

Forma1 >> Forma1.Hide >> klik na "show" ikonu iz notifikacija, contextMenuStrip; >> Forma2 >> klik na "button" >> Forma1.

E sad ... Pravi mi problem i javlja mi gresku ("An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll"), i TO samo u slucaju kada stavim:
Code:
public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        Form1 f1 = new Form1(); // GENERISEM FORMU 1 U FORMI 2, NA POCETKU

A sad..ako generisem formu >> button_click << prodje, ali mi OTVORI formu 1 kao da nista nisam pisao, menjao, kao pocetnu, tj NE OTVORI sa sacuvanim podacima, nego kao neki reset uradi, a pri tom se stvori jos 1 ikonica u toolbaru, kao 2 ista programa....

Da li neko zna u cemu je fora?

Hvala.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!04.04.2013. u 21:22 - pre 134 meseci
U sustini zanima me kako da menjam, da radim sa 2 forme (Show, Hide). Sad sam probao samo najosnovinije i opet mi javlja isto.

Code:
public Form1()
        {
            InitializeComponent();
        }

        Form1 f = new Form1();                                 //JAVLJA ONU GRESKO OD GORE
        
        private void button1_Click(object sender, EventArgs e)
        {
            
            f.Show();
            this.Hide();
        }

Code:
public Form1()
        {
            InitializeComponent();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f = new Form1();                //OTVARA NOVU FORMU 1

            f.Show();
            this.Hide();
        }
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: C# rad sa formama GRESKA!04.04.2013. u 23:27 - pre 134 meseci
Ovako nekako:
Code:

        public Form1()
        {
            InitializeComponent();
        }
        
        Form2 f;
        private void button1_Click(object sender, EventArgs e)
        {
            if (f == null) f = new Form2();
            f.Show();
            this.Hide();
        }

        ...

        public Form2()
        {
            InitializeComponent();
        }
        
        Form1 f;
        private void button1_Click(object sender, EventArgs e)
        {
            if (f == null) f = new Form1();
            f.Show();
            this.Hide();
        }

        ...
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 13:15 - pre 134 meseci
Ali i to mi otvara novu formu 1... Evo pojasnjenja na slikama...

Prikačeni fajlovi
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 13:26 - pre 134 meseci
Vidi jel ovo to sto hoces.
Code:
private void button1_Click(object sender, EventArgs e)
{
  Form1 f = new Form1();          
  Hide();
  f.ShowDialog();
  Show();
}
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 13:50 - pre 134 meseci
I dalje mi samo otvara formu za formom..
Probao sam u delfiju, tamo radi bez problema...(Ostane ono sto je napisano u textBoxu)..
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.isp.telekom.rs.



+373 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 14:53 - pre 134 meseci
Problem je zasto sto u Form2 ti pravis novu instancu Form1 umesto da otvoris postojecu. Dodaj nov property u Form2
Code (csharp):

Form1 ParentForm { get; set; }

A zatim dopisi u Form2 klasi:
Code (csharp):

public Form2(Form1 parent) :base() { this.ParentForm = parent; }

Zatim kada hoces da pokrenes iz Form1 novu Form2 koristi liniju:
Code (csharp):

Form2 f2 = new Form2(this);
f2.Show();
this.Hide();

A iz Form2 kada hoces da pokazes Form1:
Code (csharp):

ParentForm.Show();
this.Hide();


P.S. Nisam dugo radio sa winforms, moguce je da vec postoji konstruktor sa parametrom parent.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 15:23 - pre 134 meseci
Dobro je radi..Nego me zanima da li mogu da napravim i pozivam "child" form kao ovu Form2?
Zanima me zato sto u programu, kada mi je ikonica u toolbaru, znaci kada je Form1.Hide()...i kada otvorim Formu2 da bih otvorio formu1, otvori mi se jos jedna Form2, isto dole ikonica...
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.isp.telekom.rs.



+373 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 15:50 - pre 134 meseci
Vidi da li ti bool property .ShowInTaskbar odgovara sa skirvanje iz Taskbara.

Nisam siguran na sta mislis kada kazes "child", ali ako hoces da imas samo jednu Form2 a ne da pravis novu svaki put, i da sacuvas njeno stanje (kao sto hoces da cuvas stanje Form1), mozes to uraditi ovako:
Code (csharp):

Form2 _childForm;
Form2 ChildForm
{
     get {
          if(_childForm == null)
               _childForm = new Form2(this);
          return _childForm;
     }
     set { _childForm = value; }
}
 
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 15:50 - pre 134 meseci
Ustvari sada koliko vidim, otvori mi jos jednu formu1, ali radim sa onom sto sam vec radio...Jel moguce da mi notificationBar ili contextMenuStrip pravi problem?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 16:08 - pre 134 meseci
Nije moguce da ti to pravi problem vec si zaista instancirao 2 puta formu 1 ili 2 puta formu 2 ili stagod da ti se vec desava.
Ako dolazis iz Delphija, nije mi jasno kako si tamo radio i do sad nisi naucio najbanalnije koncepte OOP-a koji vaze svuda
dal radio u .Net-u, Javi, Delphiju, ...
Uzmi najosnovniji tutorijal koji se tice OOP-a (i sintakse u C#) i prouci malo sta je instanca, staticke metode, varijable i
sve ce ti se samo kazati.
Umesto jednog dana ucenja i shavatanja sustine ti mozes sad da eksperimentises 10 dana i da postavljas mesec dana
pitanja po forumima i da trazis resenja a da ti i dalje ne bude jasno.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 17:13 - pre 134 meseci
Hah, pa nije bas da dolazim iz delfija, tamo sam samo probao, u pravu ste sto se toga tice, da bih trebao da pocnem iz pocetka, i obratim paznju na propuste...
Inace, program mi radi ono za sta je namenjen, s tim sto mi to dole u toolbaru svaki put ulepsa za jos jednu ikonicu.
Ostalo je mozda da nadjem best solution...

Evo inace na sta mislim...

Hvala svima
Prikačeni fajlovi
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.sbb.rs.



+373 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 17:26 - pre 134 meseci
Tesko da mozemo da ti pomognemo bez malo boljeg uvida u kod. Verovatno je problem sto prozore ne zatvaras nego ih skrivas, pa oni ostaju u memoriji.

Inace, dosao sam u priliku da testiram i meni na Windows 7 sa Hide() sakrije i prozor u taskbaru, tako da se u taskbaru nalazi samo aktivna (vidljiva) forma.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 17:45 - pre 134 meseci
Naravno.. Username = Marko, Pass = 1234. Evo koda:
>> FORMA 1
Code:

public partial class Form1 : Form
    {
            RegistryKey RunKljuc = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);     //Pokretanje programa na start racunara (StartUp)
            RegistryKey TimeKljuc = Registry.CurrentUser.CreateSubKey("ShutDownTimer");                                           //Kreiranje reg. kljuca

       public Form1()
        {
            RunKljuc.SetValue("ShutDown", Application.ExecutablePath.ToString());                                                //RUN (StartUp)
            InitializeComponent();
        }

        int minutaOdbrojavanje, vrednostReg, preostaloVremena;                           

        //NA DUGME SHUTDOWN GASI, ILI STARTUJE TIMER

        private void dugmeGasi_Click(object sender, EventArgs e)
        {
            try
            {
                if (RadiSvakiDan.Checked)
                {
                    vrednostReg = minutaOdbrojavanje;

                    TimeKljuc.SetValue("Svaki dan", vrednostReg);
                    TimeKljuc.SetValue("Preostalo", vrednostReg);

                    timer1.Start();
                }
                else
                {
                    TimeKljuc.SetValue("Svaki dan", 0);
                    TimeKljuc.SetValue("Preostalo", 0);

                    timer1.Start();
                }

                this.Hide();
                this.ShowInTaskbar = false;
            }

            catch (Exception ex)
            {
                MessageBox.Show("Unesi podatke.", "Greska");
            }
        }

        //NA DUGME U REDU DODAJE VREDNOST IZ TEXT BOXA U LABELU

        private void URedu_Click(object sender, EventArgs e)
        {
            try
            {
                minutaOdbrojavanje = Convert.ToInt32(tbMinuta.Text) * 60;
                lbVreme.Text = minutaOdbrojavanje.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unesi podatke.", "Greska");
            }
        }

        //TIMER

        private void timer1_Tick(object sender, EventArgs e)
        {
            minutaOdbrojavanje--;
            lbVreme.Text = minutaOdbrojavanje.ToString();
            tsOdbrojavanje.Text = minutaOdbrojavanje.ToString();                      //U contextMenuStrip imam TextBox, tako da mogu da proverim koliko vremena je jos ostalo...

            if (Convert.ToInt32(TimeKljuc.GetValue("Svaki dan")) > 0)                 //U slucaju da se izadje iz programe pre isteka vremena, pamti se koliko je jos vremena ostalo
            {
                preostaloVremena = minutaOdbrojavanje;
                TimeKljuc.SetValue("Preostalo", preostaloVremena);
            }
            
            if (minutaOdbrojavanje == 0)
            {
                preostaloVremena = 0;
                TimeKljuc.SetValue("Preostalo", preostaloVremena);
                System.Diagnostics.Process.Start("shutdown.exe", "-s -t 0");
                Application.Exit();
            }
        }

        //PRI POKRETANJU PROGRAMA PROVERA SE DA LI JE PREOSTALO VREMENA, AKO JESTE NASTAVLJA SE ODBROJAVANJE...

        private void Form1_Load(object sender, EventArgs e)
        {
            DateTime vremeGasenja = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0, 0);

            int mesec = vremeGasenja.Month;
            int dan = vremeGasenja.Day;

            if (DateTime.Now.Day == dan && DateTime.Now.Month == mesec)
            {
                if (Convert.ToInt32(TimeKljuc.GetValue("Svaki dan")) > 0)
                {
                    if (Convert.ToInt32(TimeKljuc.GetValue("Preostalo")) > 0)
                    {
                        minutaOdbrojavanje = Convert.ToInt32(TimeKljuc.GetValue("Preostalo"));
                        timer1.Start();
                    }
                    else
                    {
                        minutaOdbrojavanje = Convert.ToInt32(TimeKljuc.GetValue("Svaki dan"));
                        timer1.Start();
                    }

                    this.Hide();
                    this.ShowInTaskbar = false;
                }
            }
        }

        //NA MINIMIZE SAKRIVA FORMU

        protected override void OnResize(EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.ShowInTaskbar = false;
                //notifyIcon1.Visible = true;
                this.Hide();
            }
        }

        //NA SHOW IZ CONTEXTMENU-A PRIKAZUJE FORMU 2

        private void tsShow_Click(object sender, EventArgs e)
        {
            try
            {
                Form2 f2 = new Form2(this);

                f2.Show();
                this.Hide();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //RESETOVANJE SVEGA

        private void tbMinuta_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.F11)
                {
                    timer1.Stop();
                    lbVreme.Text = "";
                    tsOdbrojavanje.Text = "";

                   TimeKljuc.SetValue("Svaki dan", 0);
                   TimeKljuc.SetValue("Preostalo", 0);

                    Application.Exit();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //KLIK NA "X" PITA DA LI ZELIS DA IZADJES IZ PROGRAMA

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (e.CloseReason == CloseReason.UserClosing)
                {
                    DialogResult zatvori = MessageBox.Show("Da li zelite da zatvorite program?", "ShutDown", MessageBoxButtons.YesNo);

                    if (zatvori == DialogResult.Yes)
                        Application.Exit();
                    else
                        e.Cancel = true;
                }
                else
                    Application.Exit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //DUPLI KLIK NA IKONICU U TOOLBARU, RADI ISTO STO I SHOW...

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                Form2 f2 = new Form2(this);

                f2.Show();
                this.Hide();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

>> FORMA 2
Code:

 public Form2(Form1 parent)
            : base()
        {
            InitializeComponent();
            this.ParentForm = parent;
        }

        Form1 ParentForm { get; set; }

        const string USER = "Marko";                      //USERNAME
        const int PASS = 1234;                           //PASSWORD

        //NA DUGME OK PROVERAVA DA LI SU UNETI PODACI TACNI, AKO JESU OTVORI FORMU 1

        private void dugmeOk_Click(object sender, EventArgs e)
        {
            try
            {

                if (tbUser.Text == USER && Convert.ToInt32(tbPass.Text) == PASS)
                {
                    Form1 f1 = new Form1();

                    ParentForm.Show();
                    ParentForm.ShowInTaskbar = true;
                    tbUser.Text = "";
                    tbPass.Text = "";
                    this.Hide();
                }
                else
                    MessageBox.Show("Pogresni podaci.", "GRESKA!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Pogresni podaci.", "GRESKA!");
            }
        }

        //NA "X" MI SAKRIJE FORMU 2

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (e.CloseReason == CloseReason.UserClosing)
                {
                    e.Cancel = true;
                    this.Hide();
                }
                else
                    Application.Exit();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Pogresni podaci.", "GRESKA!");
            }
        }

        //ISTO KAO DUGME OK, SAMO ULAZAK NA "ENTER"...

        private void tbPass_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                try
                {
                    Form1 f1 = new Form1();

                    ParentForm.Show();
                    ParentForm.ShowInTaskbar = true;
                    tbUser.Text = "";
                    tbPass.Text = "";
                    this.Hide();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Pogresni podaci.", "GRESKA!");
                }
            }
        }
    }
Prikačeni fajlovi
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.sbb.rs.



+373 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 18:27 - pre 134 meseci
Evo greske na prvi pogled:
Code (csharp):

if (tbUser.Text == USER && Convert.ToInt32(tbPass.Text) == PASS)
                {
                    Form1 f1 = new Form1(); //Bespotrebna linija

                    ParentForm.Show();
                    ParentForm.ShowInTaskbar = true;
 

Nema potrebe da ponovo incijalizujes f1 jer je parent vec inicijalizovan. Ovim ces samo napraviti novu instancu Form1 klase.
Ako ovo ne resi problem pogledacu kasnije detaljnije.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: C# rad sa formama GRESKA!05.04.2013. u 19:15 - pre 134 meseci
E jeste, kako li mi je to promaklo...

Hvala :D
 
Odgovor na temu

[es] :: .NET :: C# rad sa formama GRESKA!

[ Pregleda: 2238 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.