{"id":1474,"date":"2020-05-31T19:58:08","date_gmt":"2020-05-31T17:58:08","guid":{"rendered":"http:\/\/www.daniel.slask.pl\/?p=1474"},"modified":"2021-02-09T21:44:24","modified_gmt":"2021-02-09T20:44:24","slug":"tworzenie-tabeli-przy-uzyciu-textboxa-3","status":"publish","type":"post","link":"https:\/\/daniel.slask.pl\/m\/tworzenie-tabeli-przy-uzyciu-textboxa-3\/","title":{"rendered":"Tworzenie tabeli przy u\u017cyciu TextBoxa &#8211; #3"},"content":{"rendered":"\n<p>Kr\u00f3tki opis ca\u0142ego programu: Program do dynamicznego tworzenia tablicy z <em>TextBox<\/em>&#8217;\u00f3w o zadanej ilo\u015bci kom\u00f3rek, wraz z mo\u017cliwo\u015bci\u0105 zmiany niekt\u00f3rych w\u0142a\u015bciwo\u015bci wybranych kom\u00f3rek.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Co tym razem<\/span>: Zmiana w\u0142a\u015bciwo\u015bci wybranej kom\u00f3rki w tabeli &#8211; kolor tekstu oraz t\u0142a kom\u00f3rki<\/p>\n\n\n\n<p><a href=\"http:\/\/www.daniel.slask.pl\/?p=1439\">Tym razem<\/a> zajmiemy si\u0119 dodatkami wizualnymi dla utworzonej tabeli, a dok\u0142adnie zmian\u0105 koloru t\u0142a oraz tekstu dla wybranej kom\u00f3rki. Wybieranie kom\u00f3rki, b\u0119dzie odbywa\u0142o si\u0119 poprzez klikni\u0119cie przyciskiem myszy &#8211; lewym &#8211; a ustawianie danych kolor\u00f3w poprzez przycisk typu Button.<\/p>\n\n\n\n<p>Umieszczamy na naszej formatce 2 <em>labele<\/em>, oraz 2 <em>textboxy <\/em>oraz jeden przycisk. Opisujemy je tak jak jest pokazane na zdj\u0119ciu (<em>kolor t\u0142a<\/em>, <em>kolor tekstu<\/em>, a przycisk <em>ustaw<\/em>). Aby pojawia\u0142 si\u0119 jaki\u015b domy\u015blny tekst przy uruchamianiu naszej aplikacji we w\u0142a\u015bciwo\u015bciach <em>textboxa <\/em>wpisujemy &#8222;Przyk\u0142adowy&#8221; do parametru <em>Text<\/em>. Aby mo\u017cliwa by\u0142a zmiana koloru, nale\u017cy jeszcze doda\u0107 kontrolk\u0119, kt\u00f3ra b\u0119dzie powodowa\u0142a otwarcie okienka umo\u017cliwiaj\u0105cego wybranie tego koloru. Z przybornika kontrolek wybieramy <em>ColorDialog <\/em>(znajduje si\u0119 w kategorii okna dialogowe) i przenosimy j\u0105 na nasz\u0105 formatk\u0119. Zostanie dodana w dolnej cz\u0119\u015bci &#8211; nie b\u0119dzie ona bezpo\u015brednio znajdowa\u0107 si\u0119 na formatce.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-4 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-3.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"517\" height=\"199\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-3.jpg\" alt=\"\" data-id=\"1491\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1491\" class=\"wp-image-1491\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-3.jpg 517w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-3-300x115.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-3-400x154.jpg 400w\" sizes=\"(max-width: 517px) 100vw, 517px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"818\" height=\"490\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1.jpg\" alt=\"\" data-id=\"1492\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1492\" class=\"wp-image-1492\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1.jpg 818w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1-300x180.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1-768x460.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-1-400x240.jpg 400w\" sizes=\"(max-width: 818px) 100vw, 818px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-2.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"353\" height=\"525\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-2.jpg\" alt=\"\" data-id=\"1493\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1493\" class=\"wp-image-1493\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-2.jpg 353w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-2-202x300.jpg 202w\" sizes=\"(max-width: 353px) 100vw, 353px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-4.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"349\" height=\"527\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-4.jpg\" alt=\"\" data-id=\"1494\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-4.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1494\" class=\"wp-image-1494\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-4.jpg 349w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-4-199x300.jpg 199w\" sizes=\"(max-width: 349px) 100vw, 349px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Aby otworzy\u0107 okienko wyboru koloru pos\u0142u\u017cymy si\u0119 zdarzeniem polegaj\u0105cym na dwukrotnym klikni\u0119ciu LPM (lewym przyciskiem myszy) na naszego <em>textboxa<\/em>. Przechodzimy wi\u0119c do obs\u0142ugi zdarze\u0144 naszej kontrolki i wybieramy zdarzenie <em>DoubleClick <\/em>&#8211; klikamy na niego dwa razy, po czym program przeniesie nas do kodu obs\u0142uguj\u0105cego te zdarzenie. Pos\u0142u\u017cymy si\u0119 teraz not\u0105 katalogow\u0105 dla kontrolki <em><a href=\"https:\/\/docs.microsoft.com\/pl-pl\/dotnet\/api\/system.windows.forms.colordialog?view=netcore-3.1\">colordialog<\/a><\/em>.<\/p>\n\n\n\n<p>W pierwszej kolejno\u015bci musimy otworzy\u0107 to okienko, wi\u0119c szukamy metody kt\u00f3ra b\u0119dzie powodowa\u0107 otwieranie go. Metoda ta nazywa si\u0119 <em>showdialog()<\/em>. Wi\u0119c spr\u00f3bujmy i zobaczmy co si\u0119 stanie jak j\u0105 wywo\u0142amy w tym zdarzeniu. Umieszczamy wi\u0119c w zdarzeniu  <em>DoubleClick() <\/em>kod:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void textBox_tlo_DoubleClick(object sender, EventArgs e)\n{\n\tcolorDialog1.ShowDialog();\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-gallery columns-3 wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"813\" height=\"488\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5.jpg\" alt=\"\" data-id=\"1495\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1495\" class=\"wp-image-1495\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5.jpg 813w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5-300x180.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5-768x461.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-5-400x240.jpg 400w\" sizes=\"(max-width: 813px) 100vw, 813px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"491\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6.jpg\" alt=\"\" data-id=\"1496\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1496\" class=\"wp-image-1496\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6.jpg 815w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6-300x181.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6-768x463.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-6-400x241.jpg 400w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1058\" height=\"616\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7.jpg\" alt=\"\" data-id=\"1497\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1497\" class=\"wp-image-1497\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7.jpg 1058w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7-300x175.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7-768x447.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7-956x557.jpg 956w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-7-400x233.jpg 400w\" sizes=\"(max-width: 1058px) 100vw, 1058px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Po uruchomieniu programu i dwukrotnym klikni\u0119ciu LPM na nasz <em>textbox <\/em>pojawi si\u0119 okienko umo\u017cliwiaj\u0105ce wyb\u00f3r kolor. Dobra, to ju\u017c mamy mo\u017cliwo\u015b\u0107 wyboru koloru, ale jak teraz ten kolor zapisa\u0107 jako kolor t\u0142a i tekstu? Zobaczmy co m\u00f3wi nasza dokumentacja &#8211; przechodzimy wi\u0119c w niej do samej metody <em><a href=\"https:\/\/docs.microsoft.com\/pl-pl\/dotnet\/api\/system.windows.forms.commondialog.showdialog?view=netcore-3.1#System_Windows_Forms_CommonDialog_ShowDialog\">showdialog()<\/a><\/em><\/p>\n\n\n\n<p>W niej znajdujemy nast\u0119puj\u0105cy przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void button1_Click(object sender, System.EventArgs e)\n {\n    ColorDialog MyDialog = new ColorDialog();\n    \/\/ Keeps the user from selecting a custom color.\n    MyDialog.AllowFullOpen = false ;\n    \/\/ Allows the user to get help. (The default is false.)\n    MyDialog.ShowHelp = true ;\n    \/\/ Sets the initial color select to the current text color.\n    MyDialog.Color = textBox1.ForeColor ;\n    \n    \/\/ Update the text box color if the user clicks OK \n    if (MyDialog.ShowDialog() == DialogResult.OK)\n        textBox1.ForeColor =  MyDialog.Color;\n }<\/code><\/pre>\n\n\n\n<p>Kt\u00f3ry odnosi si\u0119 do przycisku, ale wykorzystamy go i zmodyfikujemy na nasze potrzeby. Pierwsza linijka tworzy obiekt, kt\u00f3ry my dodali\u015bmy ju\u017c jako kontrolka &#8211; jest to obiekt zwi\u0105zany z okienkiem dot. wyboru koloru. Mo\u017cna to rozwi\u0105za\u0107 w ten spos\u00f3b co jest w dokumentacji jak i sposobem poprzez dodanie samej kontrolki. Dodanie poprzez kontrolk\u0119 umo\u017cliwia konfiguracj\u0119 jej w spos\u00f3b \u0142atwy poprzez klikanie, natomiast tworzenie nowego obiektu jak jest w przyk\u0142adzie pokazane, konieczne jest jeszcze r\u0119czne skonfigurowanie go. Dlatego w kolejnych linijkach pozwalamy b\u0105d\u017a nie na ustawienie koloru niestandardowego, pokazanie pomocy itp. Kolejna linijka powoduje przypisanie obecnego koloru jako domy\u015blnego &#8211; mo\u017cemy j\u0105 wykorzysta\u0107 b\u0105d\u017a i nie. Nast\u0119pnie mamy kawa\u0142ek kodu kt\u00f3ry powoduje otwarcie okienka i w przypadku gdy zostanie zamkni\u0119ty poprzez przycisk <em>OK <\/em>kolor zostanie przepisany do zmiennej. Mo\u017cemy ten warunek zmieni\u0107 od innego sposobu zamkni\u0119cia, ale my zostawimy go to jak jest pokazane w przyk\u0142adzie. Wi\u0119c nasz kod powoduj\u0105cy zapami\u0119tanie koloru wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void textBox_tlo_DoubleClick(object sender, EventArgs e)\n{\n\tif(colorDialog1.ShowDialog() == DialogResult.OK)\n\t{\n\t\tkolor_tla = colorDialog1.Color;\n\t}\n}<\/code><\/pre>\n\n\n\n<p>Dodatkowo tworzymy jeszcze zmienn\u0105, kt\u00f3r\u0105 umieszczamy na pocz\u0105tku klasy &#8211; a nawet dwie, bo i dla koloru tekstu. Ustalamy przy okazji pocz\u0105tkowe kolory dla tekstu, oraz t\u0142a, kt\u00f3re b\u0119d\u0105 ulega\u0107 zmianie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">Color kolor_tla = Color.White;\nColor kolor_tekstu = Color.Black;<\/code><\/pre>\n\n\n\n<p>Zr\u00f3bmy jeszcze tak, aby kolor kt\u00f3ry ustawili\u015bmy zosta\u0142 ustawiony r\u00f3wnie\u017c w obu <em>textboxach <\/em>kt\u00f3re dotycz\u0105 w\u0142a\u015bnie zmiany koloru t\u0142a oraz tekstu. Zmiana t\u0142a jest do\u015b\u0107 prosta, polega jedynie na wpisaniu nowej w\u0142a\u015bciwo\u015bci do odpowiedniej kontrolki:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void textBox_tlo_DoubleClick(object sender, EventArgs e)\n{\n\tif(colorDialog1.ShowDialog() == DialogResult.OK)\n\t{\n\t\tkolor_tla = colorDialog1.Color;\n\t\ttextBox_tlo.BackColor = kolor_tla;\n\t\ttextBox_tekst.BackColor = kolor_tla;\n\t}\n}<\/code><\/pre>\n\n\n\n<p>To samo nale\u017cy zrobi\u0107 dla tekstu. Nie b\u0119d\u0119 ju\u017c przedstawia\u0142 ca\u0142ego procesu dla zmiany koloru tekstu. Zr\u00f3bcie to sobie w ramach zadania. Poprawny kod, znajduje si\u0119 jak zwykle na samym ko\u0144cu wpisu.<\/p>\n\n\n\n<p>Na razie zostawmy zmian\u0119 koloru a zajmijmy si\u0119 jak odczyta\u0107 wskazan\u0105 kom\u00f3rk\u0119, kt\u00f3ra na dodatek tworzona jest dynamicznie. Zacznijmy wi\u0119c od pocz\u0105tku, \u017ceby si\u0119 nie pogubi\u0107. Musimy najpierw utworzy\u0107 oraz doda\u0107 zdarzenie od klikni\u0119cia mysz\u0105 na utworzon\u0105 kom\u00f3rk\u0119. Aby sprawdzi\u0107 jak dodawane jest nowe zdarzenie, dodajmy takie przyk\u0142adowe zdarzenie dla dowolnego <em>textboxa <\/em>&#8211; w zdarzeniach szukamy <em>mouseclick <\/em>i klikamy na niego dwukrotnie aby takie zdarzenie zosta\u0142o utworzone. Nast\u0119pnie przejd\u017amy do kodu gdzie Visual Studio konfiguruje nam t\u0105 kontrolk\u0119. Spos\u00f3b post\u0119powania ju\u017c powinni\u015bcie zna\u0107 z poprzedniego wpisu. Dla przypomnienia umieszczam screen jak to wygl\u0105da gdy program nam utworzy\u0142 takie zdarzenie. <\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1055\" height=\"615\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9.jpg\" alt=\"\" data-id=\"1499\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1499\" class=\"wp-image-1499\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9.jpg 1055w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9-300x175.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9-768x448.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9-956x557.jpg 956w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-9-400x233.jpg 400w\" sizes=\"(max-width: 1055px) 100vw, 1055px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1287\" height=\"312\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8.jpg\" alt=\"\" data-id=\"1501\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1501\" class=\"wp-image-1501\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8.jpg 1287w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8-300x73.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8-768x186.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8-956x232.jpg 956w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-8-400x97.jpg 400w\" sizes=\"(max-width: 1287px) 100vw, 1287px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Mo\u017cemy je skopiowa\u0107 i doda\u0107 do p\u0119tli gdzie tworzona jest nasza tabela, tylko lekko j\u0105 nale\u017cy przystosowa\u0107 do naszych potrzeb. Argumentem jaki przekazujemy jest &#8222;<em>uchwyt<\/em>&#8221; do zdarzenia. Visual studio sugeruje nam kilka rozwi\u0105za\u0144, jednym z nich jest utworzenie metody &#8211; wybieramy je. Tak wi\u0119c mamy ju\u017c przypisane zdarzenie do ka\u017cdej kom\u00f3rki z naszej tabeli oraz wst\u0119pn\u0105 obs\u0142ug\u0119 tego zdarzenia.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void button_utworz_Click(object sender, EventArgs e)\n{\n\tliczba_kolumn = Convert.ToInt16(textBox_kolumny.Text);\n\tszerokosc_kolumn = Convert.ToInt16(textBox_szer_komorki.Text);\n\t\/\/sprawdzenie czy tworzymy tabel\u0119 od ilo\u015bci kom\u00f3rek czy wierszy\n\tif (textBox_komorki.Text == \"\")\n\t{\n\t\tliczba_wierszy = Convert.ToInt16(textBox_wiersze.Text);\n\t\tliczba_komorek = liczba_kolumn * liczba_wierszy;\n\t\ttextBox_komorki.Text = liczba_komorek.ToString();\n\t}\n\telse\n\t{\n\t\tliczba_komorek = Convert.ToInt16(textBox_komorki.Text);\n\t}\n\tnr_pierwszy = panel1.Controls.Count;\n\t\/\/p\u0119tla g\u0142\u00f3wna dla wszystkich kom\u00f3rek\n\tfor (int i = 0, x = 1, y = 0; i &lt; liczba_komorek; x++)\n        {\n\t\t\/\/p\u0119tla tworz\u0105ca kom\u00f3rki w danym wierszu\n\t\tfor(y =0; (y &lt; liczba_kolumn) &amp;&amp; (i &lt; liczba_komorek) ; y++, i++)\n\t\t{\n\t\t\t\/\/tworzymy now\u0105 kontrolk\u0119 - textbox, button, oraz label\n\t\t\tTextBox ntextbox = new TextBox();\n\t\t\t\/\/umieszczanie na ekranie danej kontrolki\n\t\t\tntextbox.Location = new System.Drawing.Point(3 + szerokosc_kolumn * y, 3 + 20 * x);\n\t\t\t\/\/okre\u015blenie rozmiar\u00f3w kontrolki\n\t\t\tntextbox.Size = new System.Drawing.Size(szerokosc_kolumn, 20);\n\t\t\t\/\/przypisanie nazwy danej kontrolce\n\t\t\tntextbox.Name = \"d_box_\" + i.ToString();\n\t\t\t\/\/konfiguracja danej kontrolki - wyswietlany tekst, ewentualne ustawienia\n\t\t\t\/\/ustawienie zdarzenia \n\t\t\tntextbox.MouseClick += new System.Windows.Forms.MouseEventHandler(Ntextbox_MouseClick);\n\t\t\t\n\t\t\t\/\/dodanie kontrolek do formularza (do kolekcji - tablicy)\n\t\t\tpanel1.Controls.Add(ntextbox);\n\t\t}\n        }\n\tnr_ostatni = Controls.Count;\n}\nprivate void Ntextbox_MouseClick(object sender, MouseEventArgs e)\n{\n}<\/code><\/pre>\n\n\n\n<p>Teraz przysz\u0142a pora na odczyt klikni\u0119tej kom\u00f3rki. Umie\u015b\u0107my na naszej formatce dodatkow\u0105 kontrolk\u0119 typu <em>textbox<\/em>, aby mo\u017cna by\u0142o w niej wy\u015bwietla\u0107 nazw\u0119 wskazanej kom\u00f3rki. Przejd\u017amy teraz do samego zdarzenia od klikni\u0119cia. Przekazywany jest do tego zdarzenia wska\u017anik na obiekt, kt\u00f3ry wywo\u0142a\u0142 to zdarzenie (<em>object sender<\/em>), oraz argumenty zdarzenia. W celu wydobycia informacji, kt\u00f3ra kom\u00f3rka zosta\u0142a wybrana wykorzystamy w\u0142a\u015bnie wska\u017anik na obiekt. Nale\u017cy wi\u0119c zapami\u0119ta\u0107 &#8222;zmienn\u0105&#8221; <em>sender<\/em>. Tworzymy na pocz\u0105tku klasy zmienn\u0105 typu <em>object<\/em>, ja nazwa\u0142em j\u0105 <em>send<\/em>, a nast\u0119pnie w metodzie obs\u0142uguj\u0105cej to zdarzenie przepisujemy aktualny wska\u017anik do zmiennej. Dla cel\u00f3w testowych po przepisaniu tego wska\u017anika, wy\u015bwietlmy nazw\u0119 tej kom\u00f3rki we wcze\u015bniej umieszczonym <em>textboxie<\/em>. Aby tego dokona\u0107 wykorzystamy operator rzutowania <em><a href=\"https:\/\/docs.microsoft.com\/pl-pl\/dotnet\/csharp\/language-reference\/operators\/type-testing-and-cast\">as  <\/a><\/em>&#8211; spowoduje on, \u017ce dana zmienna b\u0119dzie &#8222;widziana&#8221; przez kompilator jako obiekt w tym przypadku typu <em>textbox<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-3 wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"818\" height=\"490\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1.jpg\" alt=\"\" data-id=\"1502\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1502\" class=\"wp-image-1502\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1.jpg 818w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1-300x180.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1-768x460.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-10-1-400x240.jpg 400w\" sizes=\"(max-width: 818px) 100vw, 818px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"489\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11.jpg\" alt=\"\" data-id=\"1503\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1503\" class=\"wp-image-1503\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11.jpg 815w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11-300x180.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11-768x461.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-11-400x240.jpg 400w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"814\" height=\"487\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12.jpg\" alt=\"\" data-id=\"1504\" data-full-url=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12.jpg\" data-link=\"http:\/\/www.daniel.slask.pl\/?attachment_id=1504\" class=\"wp-image-1504\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12.jpg 814w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12-300x179.jpg 300w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12-768x459.jpg 768w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/05\/Textbox_3-12-400x239.jpg 400w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void Ntextbox_MouseClick(object sender, MouseEventArgs e)\n{\n\tsend = sender;\n\ttextBox_ktora.Text = (send as TextBox).Name;\n}<\/code><\/pre>\n\n\n\n<p>Kompilujemy i uruchamiamy nasz program. Po utworzeniu tabeli i klikni\u0119ciu na wybran\u0105 kom\u00f3rk\u0119 powinna pojawi\u0107 si\u0119 jej nazwa w <em>textboxie<\/em>. OK &#8211; jeste\u015bmy ju\u017c coraz bli\u017cej ko\u0144ca. Jak ju\u017c wiemy kt\u00f3r\u0105 kom\u00f3rk\u0119 wskazujemy to teraz wystarczy tylko po wci\u015bni\u0119ciu przycisku <em>ustaw <\/em>zmieni\u0107 jej w\u0142a\u015bciwo\u015bci. Przechodzimy wi\u0119c do zdarzenia od przycisku <em>ustaw <\/em>&#8211; klikamy na niego dwa razy &#8211; i przy u\u017cyciu operatora rzutowania na zmienn\u0105 send zmieniamy kolor t\u0142a oraz tekstu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void button1_Click(object sender, EventArgs e)\n{\n\t(send as TextBox).BackColor = kolor_tla;\n\t(send as TextBox).ForeColor = kolor_tekstu;\n}<\/code><\/pre>\n\n\n\n<p>Kompilujemy i sprawdzamy. Po ustawieniu kolor\u00f3w, mo\u017cna zmienia\u0107 ka\u017cd\u0105 wskazan\u0105 kom\u00f3rk\u0119 z osobna &#8211; nale\u017cy za ka\u017cdym razem wcisn\u0105\u0107 przycisk ustaw. I to by\u0142oby na tyle.<\/p>\n\n\n\n<p>Jak widzicie do\u015b\u0107 cz\u0119sto korzystam z dokumentacji bardzo pomaga. Je\u017celi dokumentacja jest dobrze napisana to mo\u017cna w niej szybciej znale\u017a\u0107 informacje ni\u017c przeszukuj\u0105c otch\u0142anie internetu. Tak wi\u0119c zach\u0119cam do komentowania, a program jak zwykle mo\u017cna pobra\u0107 tutaj:<\/p>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"\" href=\"https:\/\/daniel.slask.pl\/m\/download\/1482\/?tmstv=1776533664\" rel=\"nofollow\" id=\"download-link-1482\" >\n\t<p>\n\t\tPobierz &ldquo;CS19_N01_tabela_3&rdquo;\t<\/p>\n\t<small>CS19_N01_tabela_3.zip\t\t&ndash; Pobrano 227 razy\t\t&ndash; 75,29 KB<\/small>\n<\/a>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Kr\u00f3tki opis ca\u0142ego programu: Program do dynamicznego tworzenia tablicy z TextBox&#8217;\u00f3w o zadanej ilo\u015bci kom\u00f3rek, wraz z mo\u017cliwo\u015bci\u0105 zmiany niekt\u00f3rych w\u0142a\u015bciwo\u015bci wybranych kom\u00f3rek. Co tym razem: Zmiana w\u0142a\u015bciwo\u015bci wybranej kom\u00f3rki w tabeli &#8211; kolor tekstu oraz t\u0142a kom\u00f3rki Tym razem&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/daniel.slask.pl\/m\/tworzenie-tabeli-przy-uzyciu-textboxa-3\/\">Wi\u0119cej<\/a><\/p>\n","protected":false},"author":1,"featured_media":1349,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[125,61,59],"tags":[192,65,191,216,215,193],"views":274,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/04\/Csh.png","jetpack_shortlink":"https:\/\/wp.me\/pcPgV3-nM","_links":{"self":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1474"}],"collection":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/comments?post=1474"}],"version-history":[{"count":5,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1474\/revisions"}],"predecessor-version":[{"id":1609,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1474\/revisions\/1609"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media\/1349"}],"wp:attachment":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media?parent=1474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/categories?post=1474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/tags?post=1474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}