Tworzenie tabeli przy użyciu TextBoxa – #5

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: Inkrementacja wartości w wybranych komórkach tabeli – opcja dostępna w menu kontekstowym.

Do menu kontekstowego, które utworzyliśmy w poprzednim wpisie, dodamy tym razem automatyczną inkrementację wartości co 1s dla wybranych komórek. Dodajemy więc do menu kontekstowego opcję toolStripMenuItem i nazywają ją Inkrementacja. Wchodzimy do obsługi tego przycisku. W metodzie tej utworzymy kod, który będzie automatycznie dodawał daną komórkę do listy komórek, w których ma się zwiększać jakaś wartość. Aby tego dokonać  utworzymy najpierw tablicę, której wielkość będzie zależna od ilości utworzonych komórek w tabeli, natomiast będzie ona typu własnego – tzn. utworzymy strukturę Liczydlo, która będzie zawierała trzy  pozycje. Pierwsza będzie wskaźnikiem do naszej komórki, druga będzie wartością inkrementowaną, a trzecia czy dana komórka ma zwiększać swoją wartość:

struct liczydlo{
	public object cells;
	public Int32 nr;
	public bool active;
}

//tablica dynamiczna
liczydlo[] licz;

Liczbę komórek tej tabeli będziemy określać podczas tworzenia tablicy:

//tablica dynamiczna
licz = new liczydlo[liczba_komorek];

Klikając PPM i wybierając inkrementację, będziemy aktywować, bądź dezaktywować automatyczne zwiększanie wartości. Dodajemy więc do kodu tego przycisku (inkrementacja w menu kontekstowym), kod który będzie powodował aktywację tej czynności:

private void toolStripTextBox_ink_Click(object sender, EventArgs e)
{
	if (!licz[nr_mouse_enter].active)
	{
		licz[nr_mouse_enter].active = true;
	}
	else
	{
		licz[nr_mouse_enter].active = false;
	}
}

Dodatkowo uzupełniamy kod, który odpowiadał za obsługę zdarzenia od najechania na element myszką o zapisanie numeru indeksu elementu który został wskazany do utworzonej wcześniej tablicy. Uzupełniamy go o następujące linijki (pierwsza linijka jest utworzona na zadanie do was – zmodyfikujcie tak program, aby po najechaniu na komórkę i kliknięciu działo się to samo co teraz, ale bez udziału linijki drugiej 😉 ):

nr_mouse_enter = (sender as TextBox).TabIndex;
licz[nr_mouse_enter].cells = sender; / /przypisanie odpowiedniej komórki do tablicy

Gdy już to mamy kompilujemy program i uruchamiamy go w celu sprawdzenia czy wszystko przebiegło pomyślnie czy gdzieś nie popełniliśmy jakiegoś prostego błędu. Gdy wszystko jest ok, przechodzimy dalej.

Jak już to mamy, to teraz musimy wykonać automatyczne zwiększanie liczb co 1s. W tym celu wykorzystamy timer, który umożliwia nam wykonywanie różnych czynności co określony czas. Znajduje się on w kategorii Składniki naszego przybornika. Przenosimy go na naszą formatkę i ustawiamy właściwość Interval na 1000 – wartość podajemy w ms. Następnie należy do zdarzenia Tick które będzie generowane co 1s dodać kod powodujący sprawdzenie czy w danej komórce ma zostać zwiększona wartość i należy ją zwiększyć.

private void timer1_Tick(object sender, EventArgs e)
{
	int i = 0;

	for (i = 0; i < liczba_komorek; i++)
	{
		if (licz[i].active)
		{
			licz[i].nr++;
			(licz[i].cells as TextBox).Text = licz[i].nr.ToString();
		}
	}
}

Przed uruchomieniem programu ustawmy wartość 0 we wszystkich komórkach jako wartość początkowa w naszej tabeli, oraz aktywować Timera (ustawić enabled na true w jego właściwościach):

//wpisanie początkowej wartości
ntextbox.Text = "0";

Kompilujemy i uruchamiamy program. Tworzymy tabelę i aktywujemy zliczanie w wybranych komórkach. Jak można zauważyć możemy aktywować i dezaktywować zliczanie w danej komórce (nie tylko jednej), a po ponownym aktywowaniu zliczanie nie jest rozpoczynane od nowa tylko jest kontynuowane dalej.

I to byłoby raczej wszystko. Na chwilę obecną nie przewiduję dodatkowych wpisów poszerzających działanie programu.

Wybaczcie jeżeli w którymś momencie popełniłem błędy merytoryczne – proszę o wskazanie ich abym mógł je poprawić.

Zachęcam również do komentowania.

Pobierz “CS19_N01_tabela_5”

CS19_N01_tabela_5.zip – Pobrano 168 razy – 79,84 KB

Dodaj komentarz

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