[ bigguy @ 27.02.2009. 11:17 ] @
Imali neko neku korisnu adresu da preporuci na kojoj se mogu dobiti korisne informacije u vezi kreiranja dinamickih kontrola. Rec je o sledecem da imam potrebu da napravim formu koja ce se ucitavati na osnovu settings-a i na kojoj kreiram dinamicke ComboBox-ove, TextBox-ove i Label-e.
[ peka @ 27.02.2009. 14:04 ] @
Napravi neki projekat, dodaj u dizajneru neke kontrole, pa onda pogledaj metod InitializeComponent() u toj formi (koji je dizajner generisao). Tu se nalazi kod koji generise sve kontrole na formi. Ukratko, instanciras kontrolu (Button, TextBox, CheckBox), podesis joj properties (velicini, poziciju i ostalo), i onda dodas to u kolekciju kontrola na formi. To mozes da radis u bilo kom trenutku izvrsavanja programa.

Ovaj kod recimo, dodaje neko dugme na formu.
Code:

Button mojeDugme = new System.Windows.Forms.Button();
mojeDugme.Location = new System.Drawing.Point(12, 12);
mojeDugme.Name = "mojeDugme";
mojeDugme.Size = new System.Drawing.Size(75, 23);
mojeDugme.Text = "Click here";
mojeDugme.Click += new System.EventHandler(this.mojeDugme_Click);
this.Controls.Add(mojeDugme);            
[ Sapphire @ 01.03.2009. 02:21 ] @
Ma lako je kreirati njih pomocu lokacija... Problem je kad treba nesto slozenije. Tu u pricu upadaju layout engines, dinamicki interfejsi i jos dosta toga.
WinForms je cak i dosta zastarjeo za te svrhe, u odnosu na mogucnosti XAML-a.

Uglavnom, pretpostavljam da tebi trebaju bas ove napredne opcije formatiranja i prikazivanja sadrzaja. Za to imas TableLayoutPanel i FlowLayoutPanel klase, koje rade skoro sav posao za tebe. Potrazi malo na Internetu, vjerovatno ces naici na hrpu primjera.
[ bigguy @ 04.03.2009. 09:43 ] @
Ovo pitanje sam vec postavi, ali mi niko nije dao odgovor Medjutim, cini mi se da si Sapphire najblizi odgovoru. Kako je sad vreme prolazilo i ja sam polako shvato da ovaj problem moram resiti preko nekih naprednijih klasa. Ipak trebaju mi tacnije klase koje u ovom mom slucaju mi mogu pomoci. Hajde ponovicu ono sto sam vec jednom izneo kao problem.

Primera: 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 prodje koroz ceo kod ispravno ali da on ustvari samo ne menja lblStanje.Text jer mislim da dolazi u sukob sa predhodnim tekstom koji je postojao u lblStanje.Text.

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:

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dsAnalizeBiohemije.tblAnalizeBiohemije' table. You can move, or remove it, as needed.
            this.tblAnalizeBiohemijeTableAdapter.Fill(this.dsAnalizeBiohemije.tblAnalizeBiohemije);
            // TODO: This line of code loads data into the 'dsObradaUzorka.tblObradaUzorka' table. You can move, or remove it, as needed.
            this.tblObradaUzorkaTableAdapter.Fill(this.dsObradaUzorka.tblObradaUzorka);

            Class1 conn1 = new Class1();
            conn1.setSqlConnection();

            clsFunc.odredjivanje_TotalRow("tblAnalizeBiohemije");

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

                        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);
                    }
                }
            }
        }
        
        public 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();

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