Hvordan lage en kontroll ha et annet utseende på designtime.
Somtimes en kontroll må se annerledes på designtime til hvordan de gjør under kjøring. Dette forskjellig utseende er ofte å si noe til utbygger, som vil være irrelevant for en kjøretidsbruker
standard tilnærming for å oppnå dette målet er å legge til ekstra kode i OnPaint metoden
public class MyControl. Kontroll {public styre void OnPaint (objekt avsenderen, PaintEventArgs e) {//Normal maleri her if (! DesignMode) {//design tid å male her //Tegn et rektangel rundt kontrollen}}}
Selv om dette fungerer fint, er det ikke ideelt. Her er vi blande runtime og design-tidskode. Også ta hensyn til hva som kan skje hvis en annen kontroll stammer fra denne klassen og overstyrer OnPaint
public class MyOtherControl: MyControl {public override void OnPaint (objekt avsenderen, PaintEventArgs e) {//Ring base, som trekker en rekt rundt kontroll Base.OnPaint (avsender, e); //Noen kode som vil trekke over rektangel}}
Det vi virkelig trenger er en måte å trekke til e.Graphics protestere etter at OnPaint metoden har helt ferdig, og også bare under design-tiden.
løsningen ligger i ControlDesigner klassen, og Designer attributtet
public class MyControlDesigner. System.Windows.Forms.Design.ControlDesigner {offentlig styrer void OnPaintAdornments (PaintEventArgs e) {//design tid maleri her //Tegn et rektangel rundt kontrollen}}
Så, vi bare knytte MyControlDesigner med MyControl klassen, merk hvordan OnPaint metoden ikke lenger har noen design-time maleri i den.
[System.ComponentModel.Designer (typeof (MyNameSpace.MyControlDesigner) )] public class MyControl: Kontroll {public override void OnPaint (objekt avsenderen, PaintEventArgs e) {//Normal maleri her}}