Podstawy obiektowości. Własności metody get, set
Cel: Napisz aplikację, w której odczytasz, zmienisz bieżący kolor tła wybranego elementu formatki po wskazaniu przyciskiem myszki
Budowana aplikacja w celach ćwiczeniowych ma wykorzystać metodę get (zwraca wartość właściwości) oraz set (ustawia wartość właściwości) wybranego pola obiektu (klasy, struktury). W tym przypadku będzie to zmienna typu Color dla tła wskazanego obiektu formatki aplikacji.
Krok 1: Układ komponentów
W projekcie aplikacji użyjemy poniższych komponentów
- Panel- sztuk 1, w którego obszarze umieszczono kontrolki:
- Button- sztuk 1
- TextBox- sztuk 1
- RadioButton- sztuk 1
- GroupBox- sztuk 1, w którego obszarze umieszczono kontrolki:
- Label- sztuk 4
- HScrollBar- sztuk 4
Proponowany układ kontrolek wygląda jak poniżej
Krok 2: Ustawiamy podstawowe cechy kontrolek
Kontrolce Panel i GroupBox przypisujemy pozycję dokowania w obszarze roboczym formatki. W zależności od przeznaczenia kontrolki wprowadzamy odpowiedni tekst
Kontrolkom HScrollBar ustawiamy wartość skoku kroku przesuwu (właściwość LargeChange) oraz granicę maksymalnej wartości (właściwość Maximum)
Krok 3: Definiujemy metodę odczytu i zapisu koloru kontrolki
Przechodzimy do kodu aplikacji- standardowo plik Form1.cs. Klawisz F7 ułatwia przejście do edytora kodu. W kodzie definiujemy zmienną prywatną typy Control (w kodzie programu to zmienna o nazwie c) oraz prywatną metodę przypisania i odczytu koloru. W kodzie programu, to metoda o nazwie KolorTla
Skompiluj program i sprawdź czy nie ma błędów kompilacji.
Krok 4: Odczyt położenia suwaków
Definiujemy bezparametrową funkcję odczytującą położenie suwaków. Położenie suwaków będzie związane z wartością składowej koloru oraz kanału przezroczystości. Kolory tła kontrolek opisane są typem Color w postaci 32 bitów, po 8 bitów na każda składową (metoda odczytu Color.FromArgb)
Tę funkcje wywołamy w momencie uruchomienia aplikacji oraz przy każdorazowym zmianie położenia suwaków.
Krok 5: Pierwszy odczyt koloru
Pierwszy odczyt koloru wybranej kontrolki na sztywno w kodzie programu (tu kontrolka panel1) odbywa się w momencie uruchomienia aplikacji. W tym celu modyfikujemy zawartość metody publicznej public Form1. Jest to zarazem konstruktor klasy Form dla głównej formatki.
Skompiluj i uruchom program. W zależności od ustawionego koloru tła panelu wskazania suwaków są różne.
Krok 6: Tworzymy metodę zmiany koloru przy użyciu suwaków
Zaznaczamy grupę suwaków i przypisujemy im akcję zmiany wartości położenia suwaka w postaci wspólnej funkcji dla każdego suwaka. W kodzie programu nazwa funkcji to: hScrollBar1_Scroll(object sender, ScrollEventArgs e)
Nazwa funkcji oraz jej deklaracja odbywa się automatycznie na przykład po szybkim dwukrotnym kliknięciu po wybraniu akcji Scroll. Patrz poniższy rysunek
Ciało tej funkcji wypełniamy poniższym kodem
Skompiluj program i sprawdź efekt działania.
Krok 7: Zmiana koloru kontrolki wskazanej myszką
W zależności jaka kontrolka przypisana jest do zmiennej c typu Control, to dla niej zmieniane są składowe koloru. Przypisanie możemy zrobić na sztywno w kodzie programu (do tej pory jest to panel1) lub przez wskazanie myszką.
Wskazanie myszką wymaga podmianę kontrolowanego obiektu. W kodzie programu realizuje to instrukcja
c=(Control)sender;
Gdzie sender to zmienna typu object
Wybranym kontrolką przypisujemy możliwość takiej zmiany. Zrobimy to w metodzie kliknięcia myszką (akcja Click) w obszar pole wybranej kontrolki. Do tego celu wybierzemy kontrolki zawarte w kontrolce panel1. Patrz poniższy rysunek
Ciało funkcji zawiera poniższy kod
Skompiluj program i sprawdź efekt działania aplikacji
Zawartość pliku Form1.cs
Pełny kod pliku głownej klasy Form utworznej aplikacji
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WlasnosciMetody
{
public partial class Form1 : Form
{
private Control c;
/*
właściwość KolorTla zwraca odczyt zmiennej typu Color- metoda odwołania get
oraz pozwala ustawić nowe parametry zmiennet typu Color- metoda przypisania set
*/
private Color KolorTla
{
get { return c.BackColor;}
set { c.BackColor = value;}
}
private void UstawTekst()
{
label1.Text = "R: " + hScrollBar1.Value.ToString();
label2.Text = "G: " + hScrollBar2.Value.ToString();
label3.Text = "B: " + hScrollBar3.Value.ToString();
label4.Text = "A: " + hScrollBar4.Value.ToString();
}
private void UaktualnijScrolle()
{
/*
funkcja uaktualnia paski scrolli po kliknieciu w obiekt,
uaktualnienie odbywa się według składowych odczytanego bieżącego
koloru klikniertego obiektu,
wywołanie jest w private void button1_Click(object sender, EventArgs e)
*/
hScrollBar1.Value = KolorTla.R;
hScrollBar2.Value = KolorTla.G;
hScrollBar3.Value = KolorTla.B;
hScrollBar4.Value = KolorTla.A;
UstawTekst();
}
public Form1()
{
InitializeComponent();
//od tej pory kontrolka panel1 jest przypisna do zmiennej c klasy Control
c = panel1;
//ustaw pozycję suwaka kanału alfa na odczytaną z kontrolki
hScrollBar4.Value = KolorTla.A;
UstawTekst();
}
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
Color kolor = Color.FromArgb(
hScrollBar4.Value,//kanał Alfa
hScrollBar1.Value,//składowa czerwona
hScrollBar2.Value,//składowa zielona
hScrollBar3.Value//składowa niebieska
);
//przypisz nowy kolor do zmiennej prywatnej c klasy Control
KolorTla = kolor;
UstawTekst();
}
private void button1_Click(object sender, EventArgs e)
{
/*
klikniecie myszką w obiekt przekazuje
zmianę aktywnego obiektu w zmiennej c typu Control
*/
c = (Control)sender;
UstawTekst();
//info o aktywnym obiekcie, w którym zmieniany jest kolor tła
groupBox1.Text = "Składowe koloru (aktywny obiekt: " + c.Name + " )";
UaktualnijScrolle();
}
}
}