Custom design-time utseende controls

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}}



Previous:
Next Page: