Degeim Skrevet 4. januar 2011 Del Skrevet 4. januar 2011 (endret) Hei Jeg jobber med et prosjekt som inneholder en del ulike klasser med flere string-properties (og fullstendig ulike funksjoner). De aller fleste av disse klassene trenger en redigeringskontroll. Jeg liker ikke å lage en hel haug med nesten identiske kontroller for redigering av lignende klasser, så jeg håper å kunne forenkle dette en del. Det er altså ikke felles properties, så jeg kan ikke bruker interfaces eller abstrakte klasser. Et eksempel; kontrollen "User": Denne redigeringskontrollen leser inn og henter ut data slik: public User User { get { User u = new User() { Name = txtName.Text, Adress = txtAdress.Text, Email = txtEmail.Text, Extra = txtExtra.Text, Phone = txtPhone.Text, UID = uid }; return u; } set { uid = value.UID; txtName.Text = value.Name; txtAdress.Text = value.Adress; txtPhone.Text = value.Phone; txtEmail.Text = value.Email; txtExtra.Text = value.Extra; } } Så kommer spørsmålet mitt: Er det noen mulighet til å merke properties i en klasse, og så lage en generell redigeringskontroll som looper gjennom alle de merkede propertiene, oppretter label og textbox for dem, og støtter uthenting på lignende måte som vist over? Det jeg ser etter er altså: void EditUser() { //Irrelevant; kun for illustrasjon User user = LoadUserFromSomething(); //Her kommer ønsket mitt inn; en magisk UserControlEditor som tar inn en UserControl og oppretter redigeringsform for den. UserControlEditor uce = new UserControlEditor(user); //Denne må gjøre noe slikt som: // foreach(mp in control.MarkedProperties) // { // Controls.Add(new Label(){ bla, bla }); // Controls.Add(new TextBox(){ bla, bla }); // } //Når brukeren trykker "Save" uce.EditFinished += new UserUserEventHandler(uce_EditFinished); } void uce_EditFinished(User u) { //u vil nå være den samme brukeren jeg gav inn, men med brukerens endringer på plass. u.Save(); } Jeg antar dette går an å lage, kanskje ved hjelp av samme type sak som defaultvalue-greia: [Description("The user's name"),DefaultValue("")] Men hvordan? Endret 4. januar 2011 av Degeim Lenke til kommentar
GeirGrusom Skrevet 6. januar 2011 Del Skrevet 6. januar 2011 PropertyGrid er vel nøyaktig akkurat presist det du vil ha. Dersom du vil lage det selv, så er det reflection du er ute etter. Sjekk ut Type.GetCustomAttributes funksjonen. [browsable(false)] brukes for å skjule felter i en propertygrid. Lenke til kommentar
Degeim Skrevet 6. januar 2011 Forfatter Del Skrevet 6. januar 2011 .Net-rammeverket er jammen et hyggelig rammeverk. PropertyGrid passer utmerket (ser litt teit ut blant resten av kontrollene mine, men det får så være -- jeg får heller titte på reflection senere hvis jeg må). Mange takk! Lenke til kommentar
GeirGrusom Skrevet 7. januar 2011 Del Skrevet 7. januar 2011 PropertyGrid er i stor grad customizable. Men er litt vanskelig bare Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå