Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 27 odgovora
  • 6.963 pregleda

Najnovija ↓

Re: Kreiranje objekta od strane korisnika 20.02.2009. u 13:52 · pre 215 meseci #21
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.
Re: Kreiranje objekta od strane korisnika 24.02.2009. u 10:37 · pre 215 meseci #22
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?
Re: Kreiranje objekta od strane korisnika 24.02.2009. u 14:12 · pre 215 meseci
izmenjeno 2 puta, poslednji put deerbeer 24.02.2009. u 14:25
  1. deerbeer24.02.2009. u 14:25zapis iz teksta poruke
  2. deerbeer24.02.2009. u 14:23zapis iz teksta poruke
#23
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" ; 

         } 
      
     }


 } 

}


Potpis
Viva lollapalooza
Re: Kreiranje objekta od strane korisnika 24.02.2009. u 15:56 · pre 215 meseci #24
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....

Re: Kreiranje objekta od strane korisnika 25.02.2009. u 10:06 · pre 215 meseci #25
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;
                                }
                            }
                        }
                    }
                }
            } 
        }
Re: Kreiranje objekta od strane korisnika 25.02.2009. u 11:37 · pre 215 meseci #26
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 ..
Potpis
Viva lollapalooza
Re: Kreiranje objekta od strane korisnika 25.02.2009. u 12:28 · pre 215 meseci #27
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.
Re: Kreiranje objekta od strane korisnika 25.02.2009. u 13:02 · pre 215 meseci #28
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?
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme