Tworzenie tabeli przy użyciu TextBoxa – #4

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: Zmiana właściwości danej komórki poprzez menu kontekstowe – po kliknięciu PPM na daną komórkę.

Poprzednio zmienialiśmy kolor tekstu i tła poprzez wybranie koloru po kliknięciu w „statyczny” textbox. Tym razem zróbmy zmianę koloru, która będzie możliwa po wybraniu komórki i kliknięciu PPM (prawy przycisk myszy). Otworzy nam się wtedy menu kontekstowe w którym będzie można wybrać zmianę koloru lub tekstu w wybranej komórce.
Tym razem będzie nieco krócej – nie będę omawiał szczegółowo jak określam dane zdarzenia, bądź jak szukam informacji. Zostało to przedstawione w 3 poprzednich wpisach.

Aby to było możliwe najpierw należy określić którą komórkę wskazuje wskaźnik myszy. W tym celu wykorzystamy zdarzenie, ale od wskazania myszką – nazywa się ono MouseEnter. Dla testów zróbmy sobie wyświetlanie nazwy komórki w textbox po najechaniu na nią myszką (podobnie jak to było w poprzednim przypadku ale po kliknięciu na nią). Kod który będzie umożliwiał wypisanie nazwy komórki którą wskazuje myszka jest bardzo podobny do tego z poprzedniego wpisu, będziemy jednak przepisywać wskaźnik na dany obiekt do innej zmiennej:

private void textBox_MouseEnter(object sender, EventArgs e)
{
	send = sender;
	textBox_ktora.Text = (sender as TextBox).Name;
}

Kompilujemy i uruchamiamy program. Po utworzeniu tabeli i najechaniu na nią myszką powinna pojawić się nazwa komórki w naszym textboxie.

Dodajemy więc obsługę zdarzenia od najechania na komórkę:

//zdarzenie dla najechania przycisku
ntextbox.MouseEnter += textBox_MouseEnter;

Jak już mamy komórkę która wskazuje myszkę, to teraz kolej na utworzenie menu kontekstowego po kliknięciu PPM. Najpierw dodajmy kontrolkę menu kontekstowego – ContextMenuStrip w kategorii Menu i paski narzędzi. Po przeniesieniu na naszą formatkę możemy w niej umieścić różnego rodzaju pola – aż 4. Na nasze potrzeby będą to pola textbox opisane jako Zmień kolor tła i Zmień kolor tekstu. Mamy już utworzone menu kontekstowe to teraz musimy jakoś spowodować pojawienie się go po kliknięciu PPM na wybranym textboxie. We właściwościach kontrolki np. textbox jest taka właściwość jak ContextMenuStrip – znajduje się ona w kategorii zachowanie. Spróbujmy na dowolnym „statycznie” utworzonym obiekcie dodać meny kontekstowe i sprawdzić czy działa. Po kompilacji i uruchomieniu programu klikamy PPM na wybrany obiekt – powinno pojawić się nasze menu kontekstowe.

Pewnie się już domyślacie co teraz należy zrobić – musimy dodać takie menu do każdej naszej komórki, która jest tworzona dynamicznie. Dla podpowiedzi – bo już powinniście to wiedzieć – sprawdzimy jak Visual Studio dodaje takie menu do kontrolki i podobnie dodamy ją do naszej kontrolki. Po uruchomieniu programu, utworzeniu tabeli i kliknięciu PPM na daną komórkę tablicy powinno pojawić się nasze menu. Dodanie menu kontekstowego do każdej nowo utworzonej komórki przedstawia się następująco:

//dodanie menu kontekstowego
ntextbox.ContextMenuStrip = contextMenuStrip1;

Gdy już pojawi się menu po kliknięciu PPM na danej komórce, należy wykonać jeszcze 2 rzeczy – spowodować otwarcie okienka umożliwiającego wybór koloru, oraz ustawienie wybranego kolor we wskazanej wcześniej komórce. Będzie to bardzo podobne jak w poprzednio rozważanym przypadku. Aby dodać obsługę danego przycisku w menu strip należy na niego dwa razy kliknąć. W zdarzeniu od kliknięcia dodajemy funkcje które spowoduję zmianę koloru tekstu lub tła, podobnie jak to miało miejsce w poprzednim wpisie:

private void toolStripTextBox1_Click(object sender, EventArgs e)
{
	if (colorDialog1.ShowDialog() == DialogResult.OK)
	{
		kolor_tla = colorDialog1.Color;
		textBox_tlo.BackColor = kolor_tla;
		textBox_tekst.BackColor = kolor_tla;
		(send_enter as TextBox).BackColor = kolor_tla;
	}
}
private void toolStripTextBox_tekst_Click(object sender, EventArgs e)
{
	if (colorDialog1.ShowDialog() == DialogResult.OK)
	{
		kolor_tekstu = colorDialog1.Color;
		textBox_tlo.ForeColor = kolor_tekstu;
		textBox_tekst.ForeColor = kolor_tekstu;
		(send_enter as TextBox).ForeColor = kolor_tekstu;
	}
}

Można również przypisać do zdarzenia od kliknięcia tą samą metodę, ale w tedy należy jeszcze odpowiednio zmodyfikować kod, aby po zmianie koloru automatycznie zmieniał się kolor, a nie dopiero po wciśnięciu przycisku.

Sprawdźmy teraz działanie naszego programu – kompilujemy i uruchamiamy go. Po wybraniu komórki PPM i określeniu koloru np. tła powinno się ono zmienić. Dodatkowo zostawiliśmy poprzedni kod, co skutkuje tym, że po wybraniu LPM danej komórki i wciśnięciu przycisku zmień zostanie zmieniony kolor na taki jak został wcześniej ustawiony.

Teraz możemy zmienić kolor tekstu i tła PPM oraz po wskazaniu LPM danej komórki i naciśnięciu przycisku ustaw.

Na tym kończymy. Poniżej jak zwykle można pobrać cały projekt.

Pobierz “CS19_N01_tabela_4”

CS19_N01_tabela_4.zip – Pobrano 149 razy – 77,97 KB

Dodaj komentarz

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