Avatar billede steensommer Praktikant
18. marts 2011 - 22:02 Der er 20 kommentarer og
1 løsning

Log

Hej
VB .net program med flere FORMS. Jeg vil gerne lave en log der registrerer hvilke ændringer der foretages i formen, hvornår de laves og af hvem. Log'en skal skrives til en tekst fil.
Er der en der har erfaring med dette og hvordan det kan gøres?
Avatar billede arne_v Ekspert
18. marts 2011 - 22:07 #1
Er det ikke det som dit source control system gør for dig?
Avatar billede steensommer Praktikant
18. marts 2011 - 22:23 #2
For en ebd-tumpe som mig taler du i gåder :-/
Avatar billede arne_v Ekspert
18. marts 2011 - 22:27 #3
Avatar billede steensommer Praktikant
18. marts 2011 - 22:31 #4
Jeg har vist ikke forklaret mig ret godt.
Det jeg ønsker at registrere er det der skrives i formens tekstfelter og de ændringer der foretages.
Avatar billede arne_v Ekspert
18. marts 2011 - 22:46 #5
Ah. Det er jo lidt noget andet.

Men hvad er det konkret du vil vide?

Udfra de foreliggende oplysninger kan man jo ikke sige meget andet end at du skal logge nå data ændres.
Avatar billede steensommer Praktikant
18. marts 2011 - 22:57 #6
Eksempelvis:
En form der hedder Hovedkort (der indeholder en del tekstfelter). Jeg ønsker at dokumentere hvad der skrives, hvornår der skrives og af hvem. Det er et krav i min sygehusverden!
Avatar billede arne_v Ekspert
18. marts 2011 - 23:15 #7
Sæt den rigtige event på felterne og log der hvor du nu vil have logget.
Avatar billede steensommer Praktikant
18. marts 2011 - 23:18 #8
Kunne du give et eksempel?
Avatar billede arne_v Ekspert
19. marts 2011 - 01:22 #9
this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged);

...

        private string oldval = "";
        private void TextBox1TextChanged(object sender, EventArgs e)
        {
            MessageBox.Show("We are now logging that user " + Environment.UserName + " has changed " + textBox1.Name + " from '" + oldval + "' to '" + ((TextBox)sender).Text + "'");
            oldval = ((TextBox)sender).Text;
        }
Avatar billede steensommer Praktikant
19. marts 2011 - 10:31 #10
Det var da vist ikke VB .net programmering?
Jeg kan godt se hvad du laver men kan man sammansætte en kode der tager højde for ænding i alle tekstbokse (der gemmes når formen lukkes) eller skal det gøres for hver tekstboks!
Avatar billede arne_v Ekspert
19. marts 2011 - 13:35 #11
Sorry - det er C#.

I VB.NET ser det ud som:

AddHandler Me.textBox1.TextChanged, AddressOf Me.TextBox1TextChanged
       
...

        Private oldval As String = ""
        Private Sub TextBox1TextChanged(sender As Object, e As EventArgs)
            MessageBox.Show("We are now logging that user " & Environment.UserName & " has changed " & textBox1.Name & " from '" & oldval & "' to '" & DirectCast(sender, TextBox).Text & "'")
            oldval = DirectCast(sender, TextBox).Text
        End Sub
Avatar billede steensommer Praktikant
19. marts 2011 - 18:48 #12
Jeg er nok nødt til at bede om lidt mere/en del mere hjælp!

Hvor skal f.eks. linien: "AddHandler Me.textBox1.TextChanged, AddressOf Me.TextBox1TextChanged" placeres?
Avatar billede arne_v Ekspert
19. marts 2011 - 18:56 #13
I den kode som definerer formen.

Hvis du i designer dobbelt clicker på text boxen, så bør den linie indsættes helt automatisk og en stub for sub'en bliver også genereret.
Avatar billede steensommer Praktikant
19. marts 2011 - 19:06 #14
Jeg er klar over at der dannes en Private Sub Textbox1Textchanged MEN jeg har lidt svært ved at placere:

AddHandler Me.textBox1.TextChanged, AddressOf Me.TextBox1TextChanged
Avatar billede arne_v Ekspert
19. marts 2011 - 19:11 #15
Den bliver sat ind ved samme process.

Den ligger i den Xxxxxx.designer.vb fil som ligger bag ved det som du ser i designeren.
Avatar billede steensommer Praktikant
19. marts 2011 - 19:19 #16
OK jeg troede at det var en linje jeg skulle indsætte!
Når formen åbnes hentes data fra SQL database og der fremkommer derfor en del beskeder fra koden hvilket ikke er hensigtsmæssigt! Hvordan kan det undgåes?
Avatar billede steensommer Praktikant
19. marts 2011 - 21:18 #17
Jeg har i stedet gjort som følger:

Private Sub TextBox2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
        oldval = TextBox2.Text

    End Sub

    Private Sub TextBox2_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Leave
        If oldval <> DirectCast(sender, TextBox).Text Then
            MessageBox.Show("We are now logging that user " & Environment.UserName & " has changed " & TextBox1.Name & " from '" & oldval & "' to '" & DirectCast(sender, TextBox).Text & "'")
        Else
            oldval = DirectCast(sender, TextBox).Text
        End If
    End Sub

Nu mangler så "bare" at lave en tekstfil og skrive til den hver gang teksten ændres :-)
Du har vel ikke en god løsning på dette?
Avatar billede steensommer Praktikant
19. marts 2011 - 21:49 #18
Uanset så svar så du kan få point :-)
Avatar billede arne_v Ekspert
19. marts 2011 - 21:57 #19
For at skrive til en fil kan du bruge StreamWriter med append flaget sat til true.

Du kan også bruge et logging framework eller gemme log i en database.
Avatar billede arne_v Ekspert
19. marts 2011 - 21:58 #20
Dim sw As StreamWriter = New StreamWriter(logfilename", True)
sw.WriteLine("bla bla")
sw.Close
Avatar billede arne_v Ekspert
19. marts 2011 - 21:58 #21
og et svar
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
Kurser inden for grundlæggende programmering

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