Avatar billede fynbo Nybegynder
21. juni 2004 - 13:58 Der er 4 kommentarer og
2 løsninger

Bruge function fra en Form i en anden

Hej.

Jeg har to Forms, Form1 og Form2.

Hvordan benytter jeg en function fra Form1 i Form2?
Kan man med fordel lave en fil med mange forskellige funktioner, så både form1, form2 og form3 kan benytte denne fil?

Som min kode er lige nu, får jeg følgende fejl ved følgende kode:
error CS0118: 'System.Windows.Forms.Form.Owner' denotes a 'property' where a 'method' was expected

Ved denne kode fra Form2, funktionen er i Form1. Det er funktionen GetRegValue, jeg vil ha fat på.
*****
private void fSettings_Load(object sender, System.EventArgs e)
{
    Form1 frm = (Form1)(this.Owner());
    string keyvalue = frm.GetRegValue("Owner");
    this.txtOwnerName.Text = keyvalue;
}
*****

I Form1 har jeg følgende kode til at kalde Form2:
*****
fSettings mySetting = new fSettings();
mySetting.Owner = this;
mySetting.ShowDialog();
*****

Selve funktionen i Form1 ser sådan ud:
*****
public string GetRegValue(string field)
{
    RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Infinito", true);
    string keyvalue = key.GetValue(field).ToString();
    return keyvalue;
}

Sjovt nok, så virker det hele, selvom om compileren melder om fejl. Jeg kan skrive og hente navnet i min Indstillinger boks uden problemer. Hvorfor melder den så den fejl?
Avatar billede finger Nybegynder
21. juni 2004 - 14:09 #1
Til at starte med er det absolut ikke en god ide at kalde metoder på tværs af forms. ikke fordi det ikke kan virke, men fordi det er "grim" kode der bliver meget svær at vedligeholde.
Læs/Lær istedet om objekt orienteret design og start med at lave en hjælpeklasse der indeholder den slags metoder.

Det compileren brokker sig over er nok dette:
Form1 frm = (Form1)(this.Owner());
for mig giver det ikke meget mening.
Burde det ikke nærmere være 'Form1 frm = new Form1();' eller
'Form1 frm = this.Form11'->(hvis du allerede har en reference)
Avatar billede fynbo Nybegynder
21. juni 2004 - 14:18 #2
Det var også en klasse jeg mente. Kan man lægge den som en fil ved siden af de andre og hvad skal den eventuelt hedde?
Avatar billede finger Nybegynder
21. juni 2004 - 14:22 #3
ja læg den bare i en fil ved siden af.
Kald den hvad du har lyst til.
syntaksen for alle klasser (dine forms er også klasser!) er:
public class MyHelperClass
{
Public MyHelperClass()
{
}

//her kommer dine metoder også.
//du kan også slå "Static Class" op på google og finde ud af hvorfor de er fede at bruge i stedet. Men start med dette her
}
Avatar billede fynbo Nybegynder
21. juni 2004 - 14:30 #4
tusind tak :)

Hvordan kalder jeg så min fil. Lad os antage jeg kalder den MyHelperClass.cs, hvordan inkluderer jeg den så?

Kender en smule til static class igennem PHP. Kender PHP til fingerspidserne, men blev træt af, at PHP ikke var OOP.
Avatar billede finger Nybegynder
21. juni 2004 - 14:32 #5
klassen skal bare være i samme namespace og selvfølgelig være inkluderet i dit projekt.
Avatar billede fynbo Nybegynder
21. juni 2004 - 14:34 #6
Tak :) Ikke flere spørgsmål herfra så (:
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester