03. juni 2007 - 21:15Der er
7 kommentarer og 1 løsning
Custom control
Hej alle sammen
Jeg er loebet ind i et problem der kraever ekspert hjaelp.
Jeg har en kontrol, der har en property kaldet UID - unique id. Denne er af typen System.Guid. Idet jeg opretter kontrollen saa vil jeg gerne saette UID, hvilket kan goeres saaledes i konstrukteren: this.mUID = new Guid();
Problemet er at designeren i VS.Net opretter og nedlaegger kontroller som det passer den, og derved aendres UID tilsvaerende hele tiden. Hvordan kan jeg goere saaledes at det UID jeg har sat en gang forbliver det UID? Jeg har taenkt ligt paa at skrive til en resx fil, men er i tvivl om konsekvensen heraf.
Hmmm kan du ikke sætte det ved new Guid(værdi) - værdi fra Tools->Create Guid? Ellers er det måske muligt, at styre det i controllens Design klasse (arv: DesignerControl). Det er blot et skud.
UID er private. Dette medfoerer at brugeren ikke ved til UID. Paa kontrollen findes der to ekstra funktioner: Persist og Load; 1) gemmer looket af kontrollen til en ekstern db, mens 2) loader derfra. Da der er mange instanser af denne kontrol og hver har deres eget look, skal de differensieres vha. et UID.
lasserasch>> Nej, da det skal vaere transparent for brugeren af kontrollen.
groop>> 1) Dette er statisk, og da HVER instans skal vaere unik, saa ville denne ikke virke. 2) Jeg kan ikke se hvad designeren skulle kunne goere til forskel da den lider under samme problem (bliver oprettet adskillige gange). Derudover bliver designeren ikke kaldt hvis der ikke udvikles via WYSIWYG og kontrollen skal ogsaa virke under disse forhold.
Jeg er ikke helt sikker på at jeg forstår hvad det er du er ude efter, men du kan tjekke om din kontrol er i designmode med propertien Control.DesignMode. Så kan du håndtere din UID specielt, hvis det er designeren der opretter kontrollen.
Ud fra det du skriver og som jeg forstår det, så bliver du nødt til, at sætte nogle statiske værdier. Såfremt du "blot" skulle finde en løsning til WYSIWYG kunne du gå ud fra oprettelsesrækkefølgen samt en statisk tæller og alligevel ikke idet du ikke ved, ved hvilken handling kontrollen måske fjernes. Her tænker jeg når Form-designer lukkes og når udvikleren blot fjerner kontrollen fra formen. Dermed ryger referencerne. Lur mig om det ikke er grunden til, at designeren i (visual studio) selv tildeler et navn til en kontrol når den tilføjes til en form. Designeren tager udgangspunkt i navnet på kontrollens variabel (statisk) såfremt et navn ikke er angivet.
ok, saa der er ikke nogen der kender til en rigtig god loesning...
En anden maade - det daarlige alternativ - er at lade brugeren af kontrollen saette UID idet han opretter den. Ved persist og load bliver der smidt en exception hvis UID ikke er sat.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.