Gå til innhold

C#: Er det mulig å lage en generell UserControl-redigeringskontroll?


Anbefalte innlegg

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":

post-63785-0-16238300-1294157425_thumb.jpg

 

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 av Degeim
Lenke til kommentar
Videoannonse
Annonse

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...