DNK .NET klasa :) - nasledjivanje

DNK .NET klasa :) - nasledjivanje

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Interduction:
Svi smo culi za nasledjivanje klasa. Sa nasledjivanjem, klasama mozemo da prosirimo njihove standarne mogucnosti.
Objekti u .NETu su klase. Forma je klasa, TextBox je klasa, sve je klasa.
Ako zelite da vasu klasu ne moze niko da nasledi, kljucna rec 'sealed' (za C#) ili NotInheritable (za VB.NET) se koristi.
Ovde cu vam objasniti kako mozete da nasledite TextBox klasu i da joj dodate nove funkcionalnosti.

Posto standardni TextBox nema efekat promene boje TextBoxa, moramo to mi da uradimo.
Da ne postoji nasledjivanje klasa, sve bi ovo mogli da uradimo na drugi, tezi, nacin, bespotrebnim ponavljanjem slicnih kodova za svaki TextBox na Formi za LostFocus i GotFocus dogadjaje sto cini kod vecim i tezim za citanje.

Nasledjivanje nam prilazi u pomoc. Dodatnu funkcionalnost dodajemo u posebnu klase koja je nasledjena od TextBox klase.

How to:
Napravite novu klasu i ovaj kod prekopirajte u nju.

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;    namespace Controls    {       public class textBox : TextBox       {          private Color _FocusedColor;          private Color _UnfocusedColor;                 public textBox()          {             FocusedColor = FocusedColor;          }          protected override void OnGotFocus(EventArgs e)          {             this.BackColor = FocusedColor;          }          protected override void OnLostFocus(EventArgs e)          {             this.BackColor = UnfocusedColor;          }          public Color FocusedColor          {             get { return _FocusedColor; }             set { _FocusedColor = value; }          }          public Color UnfocusedColor          {             get { return _UnfocusedColor; }                       set { _UnfocusedColor = value; }          }       }    }

Explanation:
Ovoj klasi smo dodati i nova svojstva (koja rec Smile) property-je za promenu boje kada TextBox dobije i izgubi fokus.

Za eventove OnLostFocus i OnGotFocus smo morali da koristimo kljucnu rec override iz razloga sto OnLostFocus i OnGotFocus vec postoje u klasi TextBox, na ovaj nacin ih preklopimo kako bi ih mogli koristiti.

Usage:
Da bi koristili ovu novu, nasledjenu klasu, umesto one standardne deklaracije TextBoxa

System.Windows.Forms.TextBox textBox1, koristicemo Controls.textBox textBox;

Conclusion:
Kada se pokrene ovakva aplikacija, primeticemo da se TextBox drugacije ponasa.
Zamislite kako bi kod izgledao da nismo koristili nasledjivanje i da na jednoj formi imamo 20 TextBox kontrola.
Za svaki TextBox bi imali po dva eventa OnGotFocus i OnLostFocus, ovako, uz pomoc nasledjivanje, nema tolike guzve u kodu.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 14 Feb 2004
  • Poruke: 142
  • Gde živiš: Ruma, Vojvodina

Mala ispravka .-

nigde nisi iskoristio _UnfocusedColor i
pise se (koliko ja znam)
public textBox() {      _FocusedColor= Color.AliceBlue; } protected override void OnGotFocus(EventArgs e) {      this.BackColor = _FocusedColor; }

jer onako kako si ti napisao, promenljiva _FocusedColor se uopste ne koristi a dodeljivao si je ovim kodom:
public Color FocusedColor {     get { return _FocusedColor; }     set { _FocusedColor = value; } }

Ispravi to podhitno

Pozdrav ...



offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Jeste, upravu si.
To sam ja nesto dodatno radio, tj. izbacivao te property-je pa kada sam to pisao za ovau temiu zaboravio sam da ih napisem kako treba.
Popravicu to.

Ko je trenutno na forumu
 

Ukupno su 780 korisnika na forumu :: 58 registrovanih, 10 sakrivenih i 712 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., aramis s, bobido, bojank, cincarin, comi991, croato, djo97, DJORDJE-NO-1, Doca, dragoljub11987, dragon986, Drug pukovnik, flash12, goxin, havoc995, HrcAk47, ikan, ILGromovnik, Insan, Jovan Nenad, kolateralnasteta, kovinacc, KUZMAR, madza, MarKhan, Markoni29, mige, Mirage 2000N, misa1xx, mushroom, nemkea71, nenad81, nenooo, Neutral-M, nuke92, Oluj2.1, Pakito93, Panter, pein, pera bager, raskoljnikov, Regrut Boskica, rovac, sabros, sakota79, Sale.S, shaja1, simazr, Sr.Stat., Tragač, vathra, VJ, vlvl, voja64, vranjanac29, zlatkoa987, |_MeD_|