11. august 2006 - 10:26Der er
9 kommentarer og 1 løsning
Kalde en funktion i en anden form
Jeg har to forms. En hovedform og en form som åbnes fra hovedform. Vil kalde en funktion i hovedformen fra den form som åbnes, men der sker ikke en skid...det crasher ik engang :o/
Har lavet et lille testprogram.
Form1 namespace WindowsApplication1 { public partial class Form1 : Form { private static Form1 instance; public Form1() { InitializeComponent(); }
public static Form1 Instance { get { if (instance == null) { instance = new Form1(); }
return instance; } }
public void SetText() { textBox1.Text = "Hej hej"; }
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
public static Form1 Instance { get { if (instance == null) { instance = new Form1(); }
return instance; } } Hvis instance er null, det vil den altid være når dit program kører. Så opretter du en form1. Men du peger ikke på den form1 som du har kørende, som du kan se. Så jeg ville lave det om til:
Form1 namespace WindowsApplication1 { public partial class Form1 : Form { private Form1 instance; public Form1() { InitializeComponent(); instance = this; }
public Form1 Instance { get { return instance; } }
public void SetText() { textBox1.Text = "Hej hej"; }
Jeg vil faktisk mene at sådan som du vil have det til at virke, vil du have svært ved det... Netop fordi du ikke peger på det oprettet objekt af form1, skal det hele være static for at det vil virke. Fordi det bliver static kan du se det på objektet Form1, men du vil aldrig få fat i det objekt af Form1 som du har lavet en instans af, når du kører hele dit projekt.
Jeg vil mene at min løsning vil være det nemmeste lige nu.... Kan ikke lige gemmenskue hvad der skal til, for at få det til at virke for dig, med din property.
Nu skal jeg se om jeg kan forklare det hele lidt bedre, så det også giver mening for andre end mig :-).
Du har et klasse som hedder Form1. I den klasse har du en property, som skal returnere en instans af typen Form1. Den property har du lavet static og public for at du kan tilgå den ved bare at skrive From1.Instance.
Når du kører dit projekt, vil der blive oprettet en instans af din Form1 klasse, lad os kalde den objForm1. Det du så gør i objForm1 er at du laver en instans af Form2, den kalder vi objForm2. I objForm2 vil du så hive fat i din instans af objForm1. Det forsøger du at opnå ved at kalder Form1.Instance property'en.
Din property tjekker om den lokale instance variabel er null, det vil den altid være. Så opretter du en ny instans af Form1 klassen, den bliver så objForm1-2. Nu kalder dit objForm2 objekt SetText funktionen på det objekt den lige har modtaget, i dette tilfælde er det så på objForm1-2 objektet, og ikke dit objForm1 objekt som du ønsker at få fat i.
Derfor virker din fremgangs måde, fordu du aldrig får givet den korrekte pegepind til dit objForm1 objekt. Derfor virker min tilgang, fordi jeg sender pegepinden fra den KALDENDE objForm1 objekt. På den måde kan dit objForm2 objekt kalde SetText og få det til at virke.
Alså..nu er konceptet jo således (* = sæt evt. selv navn ind efter eget valg):
Mikkel(*) kan ikke finde ud af det...Mikkel(*) er ked.. Mikkel(*) spør' Festlig køter(*) svarer Mikkel(*) er nu glad Festlig køter(*) får point og er også glad..
Det er rigtigt, jeg plejer bare ikke svare før personen jeg hjælper er helt sikker på at alt det virker som det skal. Samt at jeg har afklaret de spørgsmål der måtte hænge sammen med det der er blevet lavet/besvaret...
Huskede godt det med ShowDialog straks du skrev - er bare 100 år siden jeg sidst har lavet noget applikationsgejl. Man sveder den slags ud.
Men ja...det virker fint lige nu. Der mangler stadig en del, sån samlet set, så kommer sikkert en del knaster mere inden jeg bliver helt færdig.
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.