Avatar billede coldray Nybegynder
17. juni 2007 - 20:12 Der er 24 kommentarer og
1 løsning

Nybegynder-spørgsmål!

Hej eksperter!

Jeg har lige taget hul på C#, og sidder og leger lidt med den meget begrænset erfaring jeg har, og er stødt på et problem jeg ikke selv er i stand til at løse:

Når jeg kalder konto1.securityCheck(); får jeg følgende fejl:

C:\Documents and Settings\Coldie\My Documents\Visual Studio Projects\ConsoleApplication6\Class1.cs(78): No overload for method 'securityCheck' takes '0' arguments

public void securityCheck (string kUser, int kPass)
        {
            if (kBrugernavn == kUser)
            {
                Console.WriteLine("Brugernavn godkendt.. kontrollerer adgangskode!");
               
                if (kKode == kPass)
                {
                    Console.WriteLine("Adgangskode godkendt.. giver adgang til programmet!");
                    kAccess = 1;
                }
                else
                    Console.WriteLine("Adgangskode afvist..");
            }
            else
                Console.WriteLine("Brugernavn afvist..");
        }

På forhånd tak!
Avatar billede erikjacobsen Ekspert
17. juni 2007 - 20:14 #1
Der skal vel 2 parametre på. Du har ingen, hvis dit kald ser ud som:
konto1.securityCheck();
Du kan fx.
konto1.securityCheck("peter","hemlit");
Avatar billede coldray Nybegynder
17. juni 2007 - 20:18 #2
Ahh.. ja selvfølgelig.. det er ikke nok at indsamle informationerne i form af Console.ReadLine.. man skal også lige ha parametrene med.. tak!
Avatar billede coldray Nybegynder
17. juni 2007 - 20:18 #3
Smid et svar!
Avatar billede erikjacobsen Ekspert
17. juni 2007 - 20:23 #4
;) Nej tak, jeg samler slet ikke på point. Svar selv, accepter eget svar. Og brug pointene til noget andet...
Avatar billede coldray Nybegynder
18. juni 2007 - 15:17 #5
Et andet mindre problem;

Jeg er ved at lave et lille program der omregner temperaturer, men jeg forstår ikke hvorfor den ikke kan gøre det her:

        private void txtFahrenheit_TextChanged(object sender, System.EventArgs e)
        {
            decimal x;
            x = Convert.ToInt32(txtFahrenheit.Text);
            x = (4/9) * x * 32;
            txtCelcius.Text = Convert.ToString(x);
        }

fjerner man 4/9 så fungerer det fint, har også prøvet med andre relevante typer som double eller decimal, men samme resultatet; Celcius-boksen forbliver 0 hvis 4/9 indgår.
Avatar billede neoman Novice
18. juni 2007 - 15:22 #6
C# overloads the division operator. This means that based on the input arguments, the results may vary. For example, C# division will return an integer when dividing integers, but it will return a fractional number if a float, a double, or a decimal data type is used. Hence, 32 / 5 will return 6, dropping the remainder (2, in this case). If you wanted to return the actual value of the operation 32 / 5, you would have to specify the numbers with decimal places (that is, 32.0 / 5.0).
-----
med andre ord din "division" leverer 0. hvis du vil have det rigtige tal, så skal du dividere 4.0 med 9.0
Avatar billede neoman Novice
18. juni 2007 - 15:26 #7
i øvrigt er din formel  forkert - den rigtige er 5/9 *( x - 32)
Avatar billede coldray Nybegynder
18. juni 2007 - 15:33 #8
takker for den hurtige og præcise hjælp!
er taknemlig for den venlighed der er at finde herinde!

en anden lille ting, (håber ikke det virker belastende):

Hvis man i en windows applikation har en klasse ved navn account, og opretter en isntans af denne account i Form1_Load, altså Account test = new Accounts(parametre);

hvordan får man så adgang til denne instanses metoder fra eks. en commandbutton,

altså

        private void cmdLogInd_Click(object sender, System.EventArgs e)
        {
            Form1.test.performCheck(user,pass);
        }

hvis du forstår..

takker!
Avatar billede coldray Nybegynder
18. juni 2007 - 15:34 #9
new Account(parametre selvfølgelig (-s)
Avatar billede coldray Nybegynder
18. juni 2007 - 15:36 #10
C:\Documents and Settings\Coldie\My Documents\Visual Studio Projects\WinApp\Form1.cs(120): 'WinApp.Form1' does not contain a definition for 'test'
Avatar billede neoman Novice
18. juni 2007 - 15:44 #11
Jeg selv programmerer i VB og ASP  - så vent på at nogle mere kyndige kommer på banen. I mellemtiden ville jeg forsøge, i stedet for:

            Form1.test.performCheck(user,pass);
med

            test.performCheck(user,pass);
eller
            this.test.performCheck(user,pass);
Avatar billede erikjacobsen Ekspert
18. juni 2007 - 15:48 #12
Erklær Account test udenfor din Form1_load
Avatar billede coldray Nybegynder
18. juni 2007 - 15:50 #13
Jeg kommer også selv fra et VB miljø, desværre VB6.

test.performCheck ville være oplagt, men der er intet.

og this i en cmdbox refererer umiddelbart til dens egen attributes.

status er på nuværende tidspunkt:

        public void Form1_Load(object sender, System.EventArgs e)
        {
            Account test = new Account("username","password");
        }

        private void cmdLogInd_Click(object sender, System.EventArgs e)
        {
           
        }

skal bare finde en måde hvorpå jeg kan få adgang til test som er en instans af Account, men desværre virker hverken:

test.performCheck()
this.test.performCheck()

eller

Form1.test.performCheck()
Avatar billede coldray Nybegynder
18. juni 2007 - 15:53 #14
Mange tak erik, det virker!

Troede bare man skulle skrive det inden i Form1_Load for at få det til at virke ved program-start, men går ud fra at variabler der skal være tilgængelige for hele applikationen også skal erklæres udenfor?
Avatar billede neoman Novice
18. juni 2007 - 15:56 #15
Jepz - der står lidt om variable scope her: http://msdn2.microsoft.com/en-us/library/aa691132(VS.71).aspx
Avatar billede coldray Nybegynder
18. juni 2007 - 16:19 #16
Ikke dårligt..

En ting jeg synes virker abstrakt i C#, er måden man håndterer de forskellige instanser af de forskellige klasser på.

hvis jeg f.eks laver to instanser af Account
Account test1 = new Account();
Account test2 = new Account();

Så rent logisk kan jeg let forestille mig to imaginære konti.

En måde jeg kan kontrollere for adgang, ville være ved at kaldes

test1.performCheck();
test2.performCheck();

og se om nogle af dem returnerer true.

Men er der en metode hvorpå man kan kontrollere en hel klasses instanser; altså kalde en funktion (eller hvad man kalder det i C#), som kontrollerer alle instanser

Jeg kiggede på foreach, men den virker kun på variabler og ikke klasser (foreach element in var)

Koden kan hurtig blive uoverskuelig hvis man opretter eksempelvis 200 accounts, så skulle de jo alle hard-codes med min erfaring :)
Avatar billede coldray Nybegynder
18. juni 2007 - 16:22 #17
altså, noget álá:

foreach (object element in Account)
{
    element.performCheck(txtUsername, txtPassword);
}

og så ha en performCheck-funktion:

            public bool performCheck(string tName, string tPassword)
            {
                if (tName == this.aName && tPassword == this.aPassword)
                {
                    this.hasAccess = true;
                    return true;
                }
                else
                    this.hasAccess = false;
                    return false;
            }
Avatar billede neoman Novice
18. juni 2007 - 16:23 #18
Avatar billede coldray Nybegynder
18. juni 2007 - 21:38 #19
Jeg tror umiddelbart også det ville løse mine problemer, men jeg kan ikke få det til at virke, selvom jeg copy+paster!

Jeg har lavet en WinApp til at kontrollere og teste det i, og pastet følgende:

        public class Person

        {

            public int age;

            public string name;

            public Person(int age, string name)

            {

                this.age = age;

                this.name = name;

            }

        }


        List<person>people = new List<person>();

        people.Add(new Person(50, "Fred"));
        people.Add(new Person(30, "John"));
        people.Add(new Person(26, "Andrew"));
        people.Add(new Person(24, "Xavier"));
        people.Add(new Person(5, "Mark"));
        people.Add(new Person(6, "Cameron"));

men programmet giver utrolig mange fejl.
Avatar billede coldray Nybegynder
18. juni 2007 - 21:43 #20
argh.. det hjalp lidt at sætte den ind i Form_Load (doh!), men stadig fejl ved

List<person>people = new List<person>();

den brokker sig primært ved afslutningen <person>();
Avatar billede neoman Novice
18. juni 2007 - 21:50 #21
Forslag:
1. vent på en C# kyndig - jeg aner intet om dette her
2. Google lidt efter et virkende eksempel
Avatar billede erikjacobsen Ekspert
18. juni 2007 - 22:05 #22
Der er jo en vis forskel på "Person" og "person".
Avatar billede coldray Nybegynder
18. juni 2007 - 22:11 #23
sandt, jeg tog det bare direkte fra eksemplet fra siden som der var henvist til og gik blindt ud fra det ville fungere, men det gør det åbenbart ikke.

Jeg tror jeg vil læse lidt videre, fordi det er tydelidt der er meget jeg selv kan læse op på før jeg kommer og generer jer! ;)
Avatar billede erikjacobsen Ekspert
18. juni 2007 - 22:24 #24
Eh, joh, du kommer da tættere på, hvis du konskvent skriver "Person" med stort "P"
Avatar billede coldray Nybegynder
07. august 2011 - 16:28 #25
Lukker
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