Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 14:13 Der er 9 kommentarer

Kalde metode fra en form til en anden

Hej eksperter.
Jeg har en metode som skal køres i en anden form end den jeg befinder mig i. Altså jeg er i form1 og vil køre en metode i form 2. Den motode i form2 skal skrive noget i en label som befinder sig i form 2. Jeg har prøvet følgende:

Form1:
private void Ok_Click(object sender, EventArgs e)
        {
            // Kalder metoden dbConnect().
            dbConnect();

            //Tjekker om brugernavnet indtastet og den tilhørende adgangskode er korrekt ifølge DB.
            if (tbPassword.Text == attrPassword)
            {
                user = tbBrugernavn.Text;
                dbConnect();
                revision r = new revision();
                r.db(user);
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("Brugernavn eller password er ikke korrekt", "Fejl", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbBrugernavn.Focus();
            }
        }

Metode i form2:
public void db(string user)
        {
            string user1 = user;
            //SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog = dbo.test;Integrated Security=True;User Instance=True");
            SqlConnection con = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated Security=SSPI;database=test");

            try
            {
                SqlCommand cmd = new SqlCommand("SELECT * FROM brugerPass WHERE brugernavn = '" + user1 + "'", con);
                //SqlCommand cmd = new SqlCommand("UPDATE brugerPass SET online ='ja' WHERE brugernavn ='" + user + "'", con);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    string attrBrugernavn = rdr["brugernavn"].ToString();
                    label2.Text = "Du er logget ind som: " + attrBrugernavn;
                }
            }
            catch (Exception er)
            {
                MessageBox.Show("Fejl : " + er.Message);
            }

            finally
            {
                if (con != null)
                {
                    con.Close();
                }
            }
        }

Problemet er at den ikke skriver noget i label2. Men programmet kører fint. Det jeg måske tror, er at man skal på en måde updatere formen eller noget i den retning????

Mvh

Martin
Avatar billede kalp Novice
29. oktober 2007 - 14:17 #1
www.kalp.dk/ToForms.zip

se på det eksempel som inspiration.
Avatar billede lasserasch Juniormester
29. oktober 2007 - 14:28 #2
martinsorensen, vil du være rar at lukke de efterhånden mange åbne spørgsmål, som du har modtaget svar på, men endnu ikke har accepteret.

F.eks. : http://www.eksperten.dk/spm/802498

Når det så er sagt, så ville jeg tjekke følgende :

1.
revision går jeg ud fra er en form. Jeg kan ikke se at du nogensinde åbner den form. Du kalder kun db(), men db() åbner aldrig formen som jeg kan se.

Kør en this.Show() i din db() metode.

2.
Din SQL query, retunerer den overhovedet nogle records? Forsøg evt. med denne ændring :

if (rdr.Hasrows)
{
while (rdr.Read())
{
string attrBrugernavn = rdr["brugernavn"].ToString();
label2.Text = "Du er logget ind som: " + attrBrugernavn;
}
}
else { MessageBox.Show("Ingen Records Retuneret");}

/Lasse
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 14:38 #3
Tak for filen. Men desværre ikke lige præcis det jeg havde tænkt mig. Det som er problemet er når jeg køre db() i form1 fra form2, da vil den ikke skrive noget i label2 i form1. Selvom det er i form 1 som metoden bliver kørt, men kaldt fra form2. Alt ovenstående virker hvis man kalder metoderne fra hver sin form.
Avatar billede kalp Novice
29. oktober 2007 - 14:41 #4
Hvis din db() metode opdatere en label og du kan se den bliver kørt fra form2..
så skal det også virke..

ellers har du en kodefejl og den kan vi ikke se.
Avatar billede lasserasch Juniormester
29. oktober 2007 - 14:44 #5
Som sagt, luk tidligere spørgsmål først.... så kan du få hjælp til dette.

Jeg har efter dit nr. 2 indlæg en god ide om hvad det er der går galt for dig.... men martin, luk nu tidligere spørgsmål først...

Og de spørgsmål, hvor ingen har smidt et svar, der plejer man at skrive "Smid et svar for points." og så reagerer folk rimelig hurtigt og alle er glade...

/Lasse
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 14:44 #6
formen er åben. revision er den form som bliver åbnet ved programstart. Det som du (lasse) foreslår åbner bare en ny form (den samme som er åben). kan jeg ikke liggen en for for Update ind som bare opdatere den allerede åbne form?
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 15:01 #7
Så skulle de være lukket ;) sorry jeg ikke lige havde fået det gjort. Men har først set nu man kan se en oversigt over sine spørgsmål.
Avatar billede lasserasch Juniormester
29. oktober 2007 - 15:18 #8
Ok, vil det sige at form1 og form2 er den samme form, bare 2 gange?

I dit første indlæg skriver du : "label2.Text = "Du er logget ind som:....."
som om label2 ligger på form2.

Senere skriver du : "da vil den ikke skrive noget i label2 i form1."

Så prøv lige at forklare os helt fra bunden følgende :

1. Hvilken form starter programmet med at have åben?
2. På hvilken form ligger den label du gerne vil have opdateret med tekst?
3. Hvilken form ligger din db() metode på?

Fint med hensyn til lukning af tidligere spørgsmål...

/Lasse
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 16:12 #9
1: Form1
2: Form2
3: Form2

Jeg kalder db(); fra form1 i form2. db(); kommer så frem til et result, som skal skrives i label2. Så label2 og db() er i samme form. Alt virker hvis man køre metoderne hver for sig. Men det er kaldet fra en anden form/class som gør den ikke vil som jeg vil :(
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