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

Kreiranje objekta od strane korisnika

[es] :: .NET :: .NET Desktop razvoj :: Kreiranje objekta od strane korisnika

Strane: 1 2

[ Pregleda: 4450 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.zrlocal.net.



+1 Profil

icon Re: Kreiranje objekta od strane korisnika20.02.2009. u 12:52 - pre 184 meseci
Proradilo :) Hvala puno. Moracu da pogledam malo detaljnije ovaj kod jer mi sad jos nije bas sve najjasnije kako radi ali bitno je za sad da sljaka.
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.zrlocal.net.



+1 Profil

icon Re: Kreiranje objekta od strane korisnika24.02.2009. u 09:37 - pre 184 meseci
Evo vec novog problema. Naime, objekte sam formirao na sledeci nacin:
Code:

        private void Form1_Load(object sender, EventArgs e)
        {
            clsFunc.odredjivanje_TotalRow("tblAnalizeBiohemije");

            for (int i = 0; i <= clsVariables.sTotalRow; i++)
            {
                if (i != 0)
                {
                    if (clsVariables.sAnaliza != "")
                    {
                        clsFunc.citanje_Podataka(i, "tblAnalizeBiohemije");

                        Label lblStanje = new Label();
                        lblStanje.AutoSize = true;
                        lblStanje.Location = new System.Drawing.Point(clsVariables.sXlabelStanje, clsVariables.sYlabelStanje);
                        lblStanje.Name = "labelStanje" + clsVariables.sID;
                        lblStanje.Size = new System.Drawing.Size(35, 13);
                        this.Controls.Add(lblStanje);

                        TextBox txt = new TextBox();
                        txt.Enabled = false;
                        txt.Location = new System.Drawing.Point(clsVariables.sXtextBox, clsVariables.sYtextBox);
                        txt.Name = "textBox" + clsVariables.sID;
                        txt.Size = new System.Drawing.Size(100, 20);
                        this.Controls.Add(txt);
                    }
                }
            }
        }
  


A sad imam problem kako da omogucim da kada se upise neka vrednost u TextBox, tekst Label-e lblStanje zavisi od vrednosti upisane u odredjeni TextBox. Npr., imam dva TextBoxa kreirana na ovaj nacin, TextBox1 i TextBox2, i njihove granicne vrednosti su za prvi 1 i 5, a za drugi 2 i 6. Ukoliko korisnik upise u TextBox1 vrednost 3, onda je lblSatnje.Text = "", a ukoliko u TextBox2 upise vrednost 8, onda je lblStanje.Text = "HIGH". Rezultate upisa, odnosno stanje lblStanje.Text, je potrebno videti odmah napustanja polja vazenja TextBox-a. Imali neko ideju kako ovaj problem da prebrodim?
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.ptt.yu.



+395 Profil

icon Re: Kreiranje objekta od strane korisnika24.02.2009. u 13:12 - pre 184 meseci
Pa nesto otprilike ovako :
Posle kreiranja textboxa dodaj i event Leave na njegov objekat .
Code:

TextBox txt = new TextBox();
txt.Enabled = false;
//dodaj
txt .Leave += new System.EventHandler(txt_Leave);

Negde u klasi definisi funkciju za event handler u kojoj ces proveravati
sa kog textbox-a je korisnik presao (Leave event) i kroz switch
ces obradjivati za svaki ponaosob

Code:
 
private void txt_Leave(object sender, EventArgs e)
{
 TextBox txt = (TextBox)sender;

 switch (txt.Name)
 {
     case "textBox1" : 
          //ovde ispisuj u odgovarajucu labele .. 
         break; 

     case "textBox2" :
           //ovde ispisuj u odgovarajucu labele ..     
          break;   
  }
}



ili mozda bolje ovako da izgleda handler za tvoj leave event :
zbog ovog niza gde cuvas neke ID-ijeve :

Code:
 
private void txt_Leave(object sender, EventArgs e)
{
 TextBox txt = (TextBox)sender;
 for (int i = 0; i <= clsVariables.sTotalRow; i++)
 {
    if (txt.Name == "textBox" + clsVariables.sID) 
     { 
      Control [] cs = Controls.Find("labelStanje" + clsVariables.sID,true) 
      if (cs.Length > 0 ) 
        {
           Label l = (Label)cs[0] ; 
           l.Text = "ispisi u odgovarajucu labelu" ; 

         } 
      
     }


 } 

}








[Ovu poruku je menjao deerbeer dana 24.02.2009. u 14:23 GMT+1]

[Ovu poruku je menjao deerbeer dana 24.02.2009. u 14:25 GMT+1]
Viva lollapalooza
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
93.86.127.*



+987 Profil

icon Re: Kreiranje objekta od strane korisnika24.02.2009. u 14:56 - pre 184 meseci
Ili Leave definises preko:

Code:

            textBox1.Leave+=new EventHandler((sender,e)=> {
                                                                TextBox txt = (TextBox)sender;

                                                                switch (txt.Name)
                                                                {
                                                                    case "textBox1":
                                                                        //ovde ispisuj u odgovarajucu labele .. 
                                                                        break;

                                                                    case "textBox2":
                                                                        //ovde ispisuj u odgovarajucu labele ..     
                                                                        break;
                                                                }           
            });



tako da ti je sav kod oko definisanja novog textBox-a na jednom mestu da se ne cimas oko odrzavanja.

Ali ovo je vec stvar licnih preferenci....

 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.zrlocal.net.



+1 Profil

icon Re: Kreiranje objekta od strane korisnika25.02.2009. u 09:06 - pre 184 meseci
Deerbeer-ovo drugo ponudjeno resenje je imalo donekle smisla. Kazem donekle, jer sam morao da promenim lokaciju kreiranja objekta lblStanje. Stvar je u tome da ja ustvari korisniku ostavljam mogucnost da sam kreira koliko hoce TexBox-ova na osnovu jedne predhodne forme (FormUpis) gde on definise granice i naziv analize koji se potom skladiste u bazi. Pozicija elemenata na drugoj formi (Form1) se automatski izracunavaju na osnovu predhodno upisane analize. Nakon zatvaranja te FormUpis otvara se forma Form1, koja je ustvari prazna (ustvari ima samo jedan button OK) a elementi na njoj se generisu kreiranjem objekata preko funkcije Form1_Load. Razmisljajuci skontao sam da ustvari lblStanje ne treba da kreiram u okviru Form1_Load jer je ona ustvari posledica upisa u TextBox pa sam odlucio da je kreiram i postavim uslove, na osnovu drugog ponudjenog koda deerbeer-a, u okviru funkcije txt_Leave. I zamislite proradilo je
Ali odmah se javio i problem
Najbolje je da problem objasnim preko primera. Npr., korisnik je kreirao 3 analize i upisao njihove granicne vrednosti, sto znaci da u Form1 se kreiraju i 3 TextBox-a za upis dobijenih vrednosti. Kada upisem vrednosti u sva tri TextBox-a on mi ispise lblStanje za sve tri vrednosti ispravno. Ali kada se vratim i pokusam vrednosti da korigujem (ako je bila prva vrednost LOW, onda neku vrednost koja je HIGH) onda se nista ne desava, to jest nema promene kod lblStanje.Text. Pracenjem realizacije funkcije txt_Leave video sam da on ustvari promene u TextBox-ovima ne primecuje jer pamti zadnju unetu vrednost.
Moje pitanje se svodi na to kako bi mogao da omogucim korekciju jednom unetih vrednosti i kako da omogucim da se te vrednosti upisane u TextBox-ove uskladiste u bazu?
Evo i koda:
Code:

            clsFunc.odredjivanje_TotalRow("tblAnalizeBiohemije");

            for (int i = 0; i <= clsVariables.sTotalRow; i++)
            {
                if (i != 0)
                {
                    if (clsVariables.sAnaliza != "")
                    {
                        clsFunc.citanje_Podataka(i, "tblAnalizeBiohemije");

                        Label lbl = new Label();
                        lbl.AutoSize = true;
                        lbl.Location = new System.Drawing.Point(clsVariables.sXlabelID, clsVariables.sYlabelID);
                        lbl.Name = "labelID" + clsVariables.sID;
                        lbl.Size = new System.Drawing.Size(35, 13);
                        lbl.Text = clsVariables.sID + ".";
                        this.Controls.Add(lbl);

                        CheckBox ckb = new CheckBox();
                        ckb.AutoSize = true;
                        ckb.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                        ckb.Location = new System.Drawing.Point(clsVariables.sXcheckBox, clsVariables.sYcheckBox);
                        ckb.Name = "checkBox" + clsVariables.sID;
                        ckb.Text = clsVariables.sAnaliza;
                        ckb.UseVisualStyleBackColor = true;
                        ckb.CheckedChanged += new System.EventHandler(this.ckb_CheckedChanged);
                        this.Controls.Add(ckb);

                        TextBox txt = new TextBox();
                        txt.Text = "";
                        txt.Enabled = false;
                        txt.Location = new System.Drawing.Point(clsVariables.sXtextBox, clsVariables.sYtextBox);
                        txt.Name = "textBox" + clsVariables.sID;
                        txt.Size = new System.Drawing.Size(100, 20);
                        txt.MouseLeave += new System.EventHandler(this.txt_Leave);
                        this.Controls.Add(txt);
                    }
                }
            }
        }

        private void txt_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            string name = txt.Name;
            string stringid = name.Substring("textBox".Length);
            int id = int.Parse(stringid, System.Globalization.CultureInfo.InvariantCulture);

            clsFunc.citanje_Podataka(id, "tblAnalizeBiohemije");

            Label lblStanje = new Label();
            lblStanje.AutoSize = true;
            lblStanje.Location = new System.Drawing.Point(clsVariables.sXlabelStanje, clsVariables.sYlabelStanje);
            lblStanje.Name = "labelStanje" + clsVariables.sID;
            lblStanje.Size = new System.Drawing.Size(35, 13);
            this.Controls.Add(lblStanje);

            for (int i = 0; i <= id; i++)
            {
                if (txt.Name != "textBox" + i)
                { }
                else
                {
                    Control[] cs = Controls.Find("labelStanje" + i, true);
                    if (cs.Length < 0)
                    { }
                    else
                    {
                        if (txt.Text == "")
                        {
                            MessageBox.Show("GRESKA!");
                        }
                        else
                        {
                            decimal Stanje = decimal.Parse(txt.Text, System.Globalization.CultureInfo.InvariantCulture);
                            if (Stanje > clsVariables.sGornja)
                            {
                                lblStanje.Text = "HIGH";
                            }
                            else
                            {
                                if (Stanje < clsVariables.sDonja)
                                {
                                    lblStanje.Text = "LOW";
                                }
                                else
                                {
                                    lblStanje.Enabled = false;
                                }
                            }
                        }
                    }
                }
            } 
        }
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.ptt.yu.



+395 Profil

icon Re: Kreiranje objekta od strane korisnika25.02.2009. u 10:37 - pre 184 meseci
Citat:

Pracenjem realizacije funkcije txt_Leave video sam da on ustvari promene u TextBox-ovima ne primecuje jer pamti zadnju unetu vrednost.

Leave event se okida kada textbox izgubi fokus ..tako da bi labela trebala da se update-uje samo kad predjes na drugi textbox .
Ako hoces automatsko menjanje labele pri promeni vrednosti u textboxu onda hendluj event KeyUp na slican nacin kao i Leave ..

Viva lollapalooza
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.zrlocal.net.



+1 Profil

icon Re: Kreiranje objekta od strane korisnika25.02.2009. u 11:28 - pre 184 meseci
To mi ne resava problem. Meni je potrebno da nekako pronadjem nacin da mu kazem u koju od labela tekst da smesti i da pritom predhodni tekst labele obrise.
 
Odgovor na temu

bigguy
borisav ignjatov
nista
zrenjanin

Član broj: 87859
Poruke: 267
*.zrlocal.net.



+1 Profil

icon Re: Kreiranje objekta od strane korisnika25.02.2009. u 12:02 - pre 184 meseci
Upravo sam razmatrao tok funkcije txt_Leave kada se menjaju vrednosti u TextBox-u i vidim ustvari da do zabune dolazi posto se kreiraju dva ista objekta Label sa istim Name. Meni je potrebno znaci ili da brisem odredjeni objekat pa kreiram novi umesto njega (sto mislim da je laksi nacin), ili da nadjem nacina da pristupim kreiranom objektu Label odredjenog Name i potom vrsim izmenu postojeceg teksta. Imali ideju neko kako je to moguce postici?
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Kreiranje objekta od strane korisnika

Strane: 1 2

[ Pregleda: 4450 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

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