piątek, 10 stycznia 2014

projekt salon fryzjerski, automatyczne wstawianie kontrolek w c#

Rozpoczołem nie dawno kolejne starcie z projektem "Salon fryzjerski". Jest to mój trzeci program mam nadzieje że ostatni i najlepiej zrobiony, dwa poprzednie nie spełniały oczekiwań, aczkolwiek przyczyniły się do wzrostu moich umiejętności w programowaniu w C#.

Dodanie kontrolek w kodzie jest bardzo proste wpierw pokaże ogólne zasady, a potem przykład.
Dodawałem proste kontrolki typu label czy textbox akurat takie potrzebowałem i takie przykłady się pojawią.
Kontrolki najlepiej umieszczać na obiekcie typu panel, table layout panel, czy też bezpośrednio na formie
Zaczynamy od stworzenia nowego obiektu. Kolejnym krokiem jest, i tu w zależności od tego na czym kładziemy kontrolkę , potrzeba określić pozycję (Panel) lub wiersz i kolumnę  (TableLayoutPanel).
Później możemy zmieniać lub dodawać właściwości wykorzystywanej kontrolki. Na koniec trzeba dodać ją (kontrolkę) do panelu (lub table layout ...).
Przykład:
Panel jako podkład

Definicja kontrolki w tym przypadku Label (etykieta bodajże)
Label et = new Label();
Poniżej znajduje się wywołanie procedury składowanej za pomocą której uzyskam nazwę towaru z bazy, którą to póxniej wpisze do label-a.
dtTow = towar1.mag_getOne(int.Parse(dtreceptura.Rows[i]["mag_id"].ToString())); et.Text = dtTow.Rows[0]["mag_nazwa"].ToString();
Określenie pozycji label-a na panelu (x,y można to nazwać punktem zaczepienia) z tym że zmienna i jest zwiększana gdyż całość jest w pętli for, panel jest zapełniany kilkoma kontrolkami znajdującymi się w kolumnie jedna pod drugą.
  Point etPos = new Point(0, i * 25);
Przypisanie pozycji do kontrolki.
  et.Location = etPos;
Zmiana nazwy kontrolki, zmienna "i" inkrementuje się po każdym przejściu pętli więc nazwy kontrolek będą inne.
  et.Name = "et" + i.ToString();
Dodanie kontrolki do panelu.
  panel1.Controls.Add(et);

Przykład z Table Layout Panel

Definicje zmiennych określających czas
TimeSpan godzWynik = new TimeSpan(8, 0, 0);
TimeSpan godz1 = new TimeSpan(1, 0, 0);
TimeSpan dzien1 = new TimeSpan(1, 0, 0, 0, 0);
oraz datę i czas
DateTime dzien = new DateTime();

uzupelnienie tableloyout panell za pommoca petli
            int liczba = 0;

powyżej zmienna pomocnicza
W tym miejscu trzeba nadmienić że całość współpracuje z kontrolką montCalendar z której pobiera dane dotyczące daty. Kontrolki dodaje od pierwszej kolumny a nie od zerowej gdyż w zerowej kolumnie będą label-e. Pętla piersza poruszam sie po wierszach
            for (int i = 1; i < tbpCalendar.RowCount; i++)
            { 
 
 Zmienna "dzien" dostaje wartość z kalendarza z zaznaczonego dnia
                dzien = monthCalendar1.SelectionRange.Start;

Kolejna pętla poruszam się po kolumnach
                for (int j = 0; j < tbpCalendar.ColumnCount; j++)
                {

Warunek dzieki któremu nie wpisuje kontrolek do zerowej kolumny
                    if (j != 0)//nie wpisuje w zerowej kolumnie
                    { 

Deklaracja kontrolki, jest ona zmodyfikowanym TextBox-em (dodane właściwości w konstruktorze)
                        txbNew pole = new txbNew(godzWynik, dzien, "test 1");

W tym miejscu włączam właściwość wiele linii.
                        pole.Multiline = true;

Wypełniam całe pole tabeli
                        pole.Dock = DockStyle.Fill;

Zmieniam nazwę
                        pole.Name = "pole" + liczba.ToString();

Dodaje textbox-a do table layout panel-a, pole to moja kontrolka j - kolumna (!!!), i - wiersz
                        tbpCalendar.Controls.Add(pole, j, i);

Inkrementuje liczbę którą używam do zmiany nazwy.
                        liczba++;

Dodaje dzień, na potrzeby kalendarza
                        dzien += dzien1;
                    }

                }

Dodaje godziny w kalendarzy będą kolumny oznaczone jako dni wiersze jako godziny
                godzWynik = godzWynik + godz1;
            }


Usuwanie kontrolek z table layuot panel, przydatne bardzo, gdyż powyższy kod wywołany kilka razy może nie co roznieść kontrolki po panelu, a można przed wykonaniem pętli wyczyścić panel.
 tbpCalendar.Controls.Clear();

Powyższe przykłady zaczerpnięte zostały z mojego programu, który aktualnie tworzę.


 Po wielu miesiącach przerwy Czteroletnim exodusie do bloga ismartdev, który zdechł w zeszłym roku w listopadzie, na powrót wstąpiłem w ten ...