Stig Jøran Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 Heisann! Holder på med et lite prosjekt, og kom til et lite stop her. Prøver å få skrevet til en textbox som er i frmMain fra en Class. Classen er definert slik: public static classAI AI = new classAI(); Jeg prøvde meg på å lage en public void i frmMain som skriver rett til textboksen, men de får jeg ikke opp i classAI om jeg forsøker frmMain.Skrivtiltext.. Noen som kan hjelpe meg her? Lenke til kommentar
GeirGrusom Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 (endret) Problemet er at classAI ikke har noen referanse til noen instanser av frmMain. Jeg ville brukt en event og en closure for å få dette til, fordi det gjør at koden kan lett brukes i mange andre sammenhenger. Her er et eksempel på hvordan dette gjøres: public class WriteTextEventArgs : EventArgs { public string Text { get; set; } } public class ClassAi { public event EventHandler<WriteTextEventArgs> WriteText; public void SomeFunction() { if(WriteText != null) WriteText(this, new WriteTextEventArgs { Text = "Hello World!" }); } } public class frmMain : Form { public frmMain() { var MyTextBox = new TextBox() { Name = "MyTextBox" }; Controls.Add(MyTextBox); var ai = new ClassAi(); // Gi AI klassen en funksjon som skriver til MyTextBox dersom ai sin WriteText event blir kalt ai.WriteText += (sender, e) => MyTextBox.Text = e.Text; // Kall ai.WriteText event med "Hello World!" ai.SomeFunction(); } } Dette er derimot normalt ikke noe av det første en lærer, men jeg klarer ikke få meg til å skrive en løsning med statiske instanser av frmMain eller som lagrer frmMain i ClassAi, fordi det er dårlige løsninger. Endret 29. februar 2012 av GeirGrusom Lenke til kommentar
wolf5 Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 Eller noe i denne duren dersom referansen til classAI ligger i frmMain: public class frmMain : Form { public static classAI AI = null; public frmMain() { if (AI == null) AI = new classAI(this); //Oppretter ny statisk instans av AI med referanse til frmMain AI.DoSomething(); } public void UpdateTextBox(string text) { textBox1.AppendText(text); } } public class classAI { private frmMain FRM = null; public classAI(frmMain form) { this.FRM = form; } public void DoSomething() { FRM.UpdateTextBox("Hei hå"); } } Ingenting gale med statiske objekter, men man lærer fort at det kan være smart å ikke overdrive bruken. Synes det er helt greit dersom objektet/klassen logisk kun skal være en instans av i hele prosjektet. Feks en felles logge klasse. Annen variant med callback metoder: public class frmMain : Form { public static classAI AI = null; public frmMain() { if (AI == null) AI = new classAI(UpdateTextBox); //Oppretter ny statisk instans av AI med referanse til metoden AI.DoSomething(); } public void UpdateTextBox(string text) { textBox1.AppendText(text); } } public class classAI { private Action<string> callback = null; public classAI(Action<string> CallbackTextboks) { this.callback = CallbackTextboks; } public void DoSomething() { callback("Hei hå"); } } Lenke til kommentar
Stig Jøran Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 Tusen takk begge to! Lenke til kommentar
Stig Jøran Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 (endret) Ingenting gale med statiske objekter, men man lærer fort at det kan være smart å ikke overdrive bruken. Synes det er helt greit dersom objektet/klassen logisk kun skal være en instans av i hele prosjektet. Feks en felles logge klasse. Hva er en bedre måte og lage objektet på? har flere objekter jeg genererer flere instanser av i prosjektet også. Endret 29. februar 2012 av Stig Jøran Lenke til kommentar
wolf5 Skrevet 29. februar 2012 Del Skrevet 29. februar 2012 Tja. Mange måter å gjøre ting på. Kommer jo helt an på hvordan ditt prosjekt er bygget opp. Du kan ha en kontroller klasse som holder rede på de forskjellige instansene. Denne kan være statisk, eller du kan la den lage en singleton property på denne (slå opp singleton om du lurer på hva det er). Så kan du sørge for at du tilgjengeliggjør alle mulige metoder på denne som kaller inn i det respektive instansene. 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å