namespace WindowsApplication2 { public class Class1 { private Form1 CallForm; public Class1(Form1 CallForm) { this.CallForm = CallForm; this.CallForm.SkrivLabel("Hejsa..."); } } }
Det jeg gerne vil er at jeg fra Class'en kan skrive Form1.SkrivLabel("Hejsa.."); og så virker det. Sådan som jeg har forstået det, skal min Form1 være deklareret statisk for at det kan du, men det kan jeg heller ikke få til at virke.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Så det du siger er at hvis jeg laver funktionen statisk, så dutter skidtet ikke fordi label1 ikke er statisk. Så alt i alt, så er den løsning jeg har fundet frem den tætteste på? Mit mål er at have en "GUI pakke", som tager sig af alt det grafiske brugerinterface. Det vil typisk være form's (hvis flere) og en mængde funktioner som bruger/retter/skriver i disse form's. I mine tanker er det ok at en form kan instasieres flere gange, men nogle form's vil man også kun bruge i én udgave og derfor kun en instans. Den troede/håbede jeg kunne være statisk. Det er sådan et forsøg på at være rigtig object orrienteret også i GUI'en.....
Der burde vel ikke være noget i vejen for at skrivlabel returnerede en label. Alla det her: public static Label SkrivLabel() { Label l = new Label(); l.Text = "Kald af SkrivLabel()"; return l; }
Ja ok, læste lige spørgsmålet igen. Jeg svarede vist ikke helt på det der bliver spurgt om. Undskyld :)
Du kunne godt have en guiFactory klasse, hvor du via ikke statiske metoder laver designet, bgcolor, beskeder osv osv og så en metode der returnere en Form hvor alle attributer er sat. Men hvis det skulle give mening at lave det statisk så skulle dine designs gemmes på en eller anden måde og så hentes ind i de statiske metoder. Men jeg ved ikke lige helt om det er sådan noget du tænker på.
30/11-2005 10:39:18> Rent faktisk har du to muligheder, nemlig:
1)
At erklære din label for static:
static private System.Windows.Forms.Label label1;
Dette kræver dog at du efterfølgende skal ned og rette alle forekomster af:
this.label1
- til:
label1
Derefter kan du bare skrive:
namespace WindowsApplication2 { public class Class1 { public Class1() { Form1.SkrivLabel("Hejsa..."); } } }
2)
Det var den grimme metode. Den pæne er at beholde label1, som en instans-variabel, og så betjene den via instanser i stedet fro selve klassen (static). Det er det du gør, men du har lidt for meget kode med.
Ret din:
namespace WindowsApplication2 { public class Class1 { private Form1 CallForm; public Class1(Form1 CallForm) { this.CallForm = CallForm; this.CallForm.SkrivLabel("Hejsa..."); } } }
- til:
namespace WindowsApplication2 { public class Class1 { public Class1(Form1 CallForm) { CallForm.SkrivLabel("Hejsa..."); } } }
(... Medmindre at du selvfølgelig også ønsker at kunne kalde SkrivLabel fra andre metoder i din Class1).
Jeg synes du skal give nielle pointene, det er lidt mere udspecificeret med kode osv.
Men for lige at runde af så bryder det ikke med nogle objekt orienterede principper at du sender din form med i konstruktøren som du gør. Din form er jo også et objekt og det manipulerer du så via dine dertil indrettede metoder. Det er fin stil at gøre det som du gør det.
Jeg havde det med at lave "arbejdsklasser" som jeg lavede statiske (i Java og lignende i C++) dengang jeg tog min uddannelse. Jeg skal bare ha' svar, så jeg kan dele point ud....
Synes godt om
Ny brugerNybegynder
Din løsning...
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.