Tworzenie tabeli przy użyciu textboxa – #2

Krótki opis całego programu: Program do dynamicznego tworzenia tablicy z TextBox’ów o zadanej ilości komórek, wraz z możliwością zmiany niektórych właściwości wybranych komórek.

Co tym razem: Tablica tworzona w osobnym panelu z  możliwością przewijania tego panelu

Ostatnio udało nam się utworzyć tabelę ze zmienną szerokością komórek. Tylko co się dzieje jak wpiszemy np 100 komórek i 2 wiersze?

Tabela przekracza obszar formatki. Tym razem tak zmodyfikujemy program, aby możliwe było przewijanie naszej tabeli scrollem. W pierwszej kolejności dodamy panel w którym będziemy umieszczać naszą tabelę – przenosimy ją na naszą formatkę i rozciągamy do odpowiedniej wielkości. A jak umieścić dynamicznie tabelę w tym panelu? Sprawdźmy jak program Visual Studio umieszcza kontrolki w tym panelu. Dodajmy na ten panel przycisk i nazwijmy go jakąś dowolną nazwą tak żeby się wyróżniała ona, łatwiej nam będzie ją odszukać. Następnie przejdźmy do kodu programu w którym tworzone są kontrolki – otwieramy plik Form1.Designer.cs z drzewa projektu. W nim szukamy konfiguracji naszej kontrolki.

W pierwszej części umieszczana jest kontrolka na panelu poprzez odniesienie się do tego panelu. Natomiast w drugiej części konfigurowana jest ta kontrolka, ale już bez odniesienia do naszego panelu. To już wiemy jak zmodyfikować program. Ale zobaczmy jeszcze na punkt w którym rozpoczyna się rysowanie samej kontrolki przycisku. Jest tutaj niska wartość punktu początkowego sprawdźmy to – przejdźmy do okna projektowego. We właściwościach przycisku odnajdujemy pozycję  Location. Przenieśmy przycisk ponad ten panel. Lokalizacja zmieniła się dość dużo. Oznacza to, że panel ma swój układ współrzędnych.

Czyli już chyba wszystko wiemy, więc możemy przejść do modyfikacji programu. Przechodzimy do programu który znajduje się pod przyciskiem utwórz i odnajdujemy fragment który odpowiedzialny jest za umieszczenie kontrolek na formularzu. Musimy go zmienić w ten sposób aby kontrolki pojawiały się na naszym panelu. Najprościej dopisać na początku tej metody że dotyczy ona panelu:

//dodanie kontrolek do formularza (do kolekcji - tablicy)
panel1.Controls.Add(ntextbox);

Pamiętajmy też o dopisanie odniesienia do panelu podczas odczytywania pierwszej kontrolki, oraz usuwania kontrolek. Kompilujemy program i uruchamiamy go. W wpisaniu dużej liczby komórek, nadal komórki wychodzą poza formatkę, ale tym razem jak rozciągniemy okno nie pokazują się kolejne komórki – z tego powodu że rozszerzyliśmy formatkę, a nie panel. Aby zobaczyć kolejne komórki, dodajmy możliwość przewijania naszej tabeli. Przechodzimy więc do właściwości naszego panelu i zaznaczamy na True w grupie układ AutoScroll. Uruchamiamy nasz program i wpisujemy ilość komórek np 200, liczbę kolumn np. 5 i szerokość 100. Pojawiła się nam tabela i możliwość jej przewijania. Ale co to się stało – w dziwnym miejscu rozpoczyna się nasza tabela. Zapomnieliśmy zmienić położenie jej. Przechodzimy więc jeszcze raz do kodu i szukamy fragmentu kodu odpowiedzialnego za początkowy punkt każdej kontrolki. Zmieniamy w niej wartość 12 i 110 na wartości 3. Jest to początkowa wartość od której obliczane są następne położenia. Uruchamiamy program i wpisujemy dane jak poprzednio.

Tym razem powinno wszystko uruchomić się poprawnie.

Poniżej kod programu który znajduje się pod przyciskiem utwórz:

private void button_utworz_Click(object sender, EventArgs e)
{
	liczba_kolumn = Convert.ToInt16(textBox_kolumny.Text);
	szerokosc_kolumn = Convert.ToInt16(textBox_szer_komorki.Text);
	//sprawdzenie czy tworzymy tabelę od ilości komórek czy wierszy
	if (textBox_komorki.Text == "")
	{
		liczba_wierszy = Convert.ToInt16(textBox_wiersze.Text);
		liczba_komorek = liczba_kolumn * liczba_wierszy;
		textBox_komorki.Text = liczba_komorek.ToString();
	}
	else
	{
		liczba_komorek = Convert.ToInt16(textBox_komorki.Text);
	}
	nr_pierwszy = panel1.Controls.Count;
	//pętla główna dla wszystkich komórek
	for (int i = 0, x = 1, y = 0; i < liczba_komorek; x++)
       {
		//pętla tworząca komórki w danym wierszu
		for(y =0; (y < liczba_kolumn) && (i < liczba_komorek) ; y++, i++)
		{
			//tworzymy nową kontrolkę - textbox, button, oraz label
			TextBox ntextbox = new TextBox();
			//umieszczanie na ekranie danej kontrolki
			ntextbox.Location = new System.Drawing.Point(3 + szerokosc_kolumn * y, 3 + 20 * x);
			//określenie rozmiarów kontrolki
			ntextbox.Size = new System.Drawing.Size(szerokosc_kolumn, 20);
			//przypisanie nazwy danej kontrolce
			ntextbox.Name = "d_box_" + i.ToString();
			//konfiguracja danej kontrolki - wyswietlany tekst, ewentualne ustawienia
			//ustawienie zdarzenia 
			//dodanie kontrolek do formularza (do kolekcji - tablicy)
			panel1.Controls.Add(ntextbox);
		}
         }
}

Tym razem ta część była dość krótka, ale uważam, że wniosła trochę przydatnych informacji.

Zachęcam do komentowania.

Program jak zwykle można pobrać tutaj:

Pobierz “CS19_N01_tabela_2.zip”

CS19_N01_tabela_2.zip – Pobrano 192 razy – 71,40 KB

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *