Advertisement
Guest User

Untitled

a guest
May 26th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 25.79 KB | None | 0 0
  1. Public Class Form1
  2.     Inherits System.Windows.Forms.Form
  3.  
  4. #Region " Windows Form Designer generated code "
  5.    
  6. #End Region
  7.  
  8.     '************************************************************************'
  9.     '*         Strategi:   D A T O     S K A L    R E G I S T R E R E S     *'
  10.     '*                                                                      *'
  11.     '*  Hva må endres i programmet når dato skal med?
  12.     '*      - Utvide den egendefinerte datatypen
  13.     '*      - Endre konstanten postLengde
  14.     '*      - Legge til en ekstra tekstboks
  15.     '*      - Lese inn informasjonen fra denne tekstboksen
  16.     '*      - Brukte ikke With ved innlegging i egendefinert datatype
  17.     '*        overalt i leksjonen, men det er ingen grunn til ikke å
  18.     '*        gjøre det konsekvent i øvingen. With er viktig!
  19.     '*  MERK:
  20.     '*      - Siden oppgave 2 består i å lage kode for å hoppe helt
  21.     '*        først og helt sist, men fortsatt vise koden i tekstfelt,
  22.     '*        er det lurt å generalisere denne visningen ut i en egen
  23.     '*        prosedyre som kan kalles opp.
  24.     '*      - Kan også kalle denne prosedyren fra de knappene som blar
  25.     '*        bare en og en post.
  26.     '*      - Prosedyren heter visInformasjonITekstbokser()                 *'
  27.     '*                                                                      *'
  28.     '************************************************************************'
  29.  
  30.  
  31.     '************************************************************************'
  32.     '*         Strategi:   S L E T T I N G     A V    S T U D E N T E R     *'
  33.     '*                                                                      *'
  34.     '*  Fakta:
  35.     '*      - Sletting av studenter (XTRA) er ikke helt enkelt å få til.
  36.     '*      - I første øyekast innebærer det å måtte reorganisere filen
  37.     '*        og fjerne den posten som skal slettes. Dette er tidkrevende.
  38.     '*      - En vanlig teknikk er derfor å rett og slett legge til et nytt
  39.     '*        felt som heter Slettet.
  40.     '*              - Dersom dette feltet har verdi TRUE er posten
  41.     '*                ikke-eksisterende.
  42.     '*              - Dersom det er FALSE, har posten data.
  43.     '*      - En annen strategi er å blanke ut alle felt
  44.     '*      - En kan også sette teksten "SLETTET" i for eksempel første
  45.     '*        felt Navn for de poster som skal slettes.
  46.     '*      - I dette løsningsforslaget bruker vi den siste teknikken.
  47.     '*
  48.     '*  Konsekvens for Bla-funksjonaliteten:
  49.     '*      - Det er ikke bra dersom slettede poster faktisk vises i
  50.     '*        grensesnittet.
  51.     '*      - Dette kan unngås ved å sjekke i Bla-knappene om posten er
  52.     '*        slettet, og i så fall bla videre inntil en post
  53.     '*        som ikke er slettet treffes på.
  54.     '*      - MERK: Implementerer ikke dette i denne løsningen
  55.     '*
  56.     '*  Konsekvens for innlegging av nye studenter:
  57.     '*      - Dette bør fortsatt skje på slutten av filen, siden det er
  58.     '*        tidkrevende å søke gjennom filen og legge inn en ny student
  59.     '*        på en gammel slettet-post.
  60.     '*
  61.     '*  Konsekvens for filen som sådan:
  62.     '*      - En kan kjøre en "garbage collection" (opprydningsrutine)
  63.     '*        med jevne mellomrom som kopierer bare de postene som har
  64.     '*        fornuftige data over til en ny fil, og så slette hele den
  65.     '*        gamle filen. Dermed fjerner en de tomme postene for godt.
  66.     '*      - Det er for øvrig ofte regnet som viktig å ta vare på data,
  67.     '*        selv om de skal slettes. Dette for statistikkens skyld.
  68.     '*        Kanskje det er interessant å se hvor mange som er slettet?
  69.     '*        Eller å rekonstruere data? I så fall må en enten bruke et
  70.     '*        arkiv, eller bare markere slettede poster med et flagg
  71.     '*        eller teksten SLETTET. Lurt? Slike teknikker er mye brukt,
  72.     '*        både i fil- og databaseløsninger!                             *'
  73.     '*                                                                      *'
  74.     '************************************************************************'
  75.  
  76.  
  77.     '************************************************************************'
  78.     '*         G  L  O  B  A  L  E        V  A  R  I  A  B  L  E  R         *'
  79.     '*                                                                      *'
  80.     '*    Her er definisjonen av vår egendefinerte datatype, StudentPost    
  81.     '*    og globale variabler (og konstanter) som brukes                  
  82.     '*    av flere prosedyrer og knapper i programmet                       *'
  83.     '*                                                                      *'
  84.     '************************************************************************'
  85.  
  86.     Structure StudentPost
  87.         ' Tallet i parantesen til konstanten VBFixedString
  88.         ' står for lengden på hvert enkeltfelt
  89.         ' Den totale postlengden blir summen av hvert felt,
  90.         ' det vil si 60 for strengene og 8 for dato,
  91.         ' totalt 68
  92.  
  93.         <VBFixedString(30)> Public Navn As String
  94.         <VBFixedString(5)> Public Klasse As String
  95.         <VBFixedString(25)> Public EPost As String
  96.         Public Bursdag As Date
  97.     End Structure
  98.  
  99.  
  100.     'Deklarerer en variabel av typen som vi har opprettet nettopp.
  101.     'Innlesing og skriving av en student mellomlagres her.
  102.     Private minStudent As StudentPost
  103.  
  104.     'Lager en konstant for å holde rede på postlengden (her 68 bytes)
  105.     Const postLengde = 68
  106.  
  107.     'Inneholder totalt antall studenter i filen
  108.     Private Antall As Integer
  109.  
  110.     'Holder rede på hvilken post som skal skrives til eller leses fra
  111.     'i filen. Dette tallet angir altså riktig posisjon til enhver tid.
  112.     Private Posisjon As Integer
  113.  
  114.     'En fil har et logisk nummer. Lager en global
  115.     'variabel slik at filnummeret kan brukes av alle prosedyrene.
  116.     Private FilNummer As Integer
  117.  
  118.  
  119.     '************************************************************************'
  120.     '*         V  I  K  T  I  G   -  egne prosedyrer lages her              *'
  121.     '*                                                                      *'
  122.     '*    Vi ser et mønster hvor flere hendelsesprosedyrer                  
  123.     '*    skal utføre samme kode: nemlig å skrive noe til skjerm            
  124.     '*    Lager derfor egne prosedyrer som gjør dette                       *'
  125.     '*                                                                      *'
  126.     '************************************************************************'
  127.  
  128.  
  129.  
  130.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  131.     ' Navn:         visInformasjonITekstbokser                               '
  132.     ' Argumenter:   en post av type StudentPost                              '
  133.     ' Hva skjer?    Overfører innholdet i posten til tekstboksene på         '
  134.     '               skjermen.                                                '
  135.     ' Merk:         Bruker With til å hente ut spesielle felt.               '
  136.     '               Dette er en egendefinert prosedyre som må kalles fra     '
  137.     '               steder der en ønsker å slette tekstfeltenes innhold, for '
  138.     '               eksempel i knappene "Lagre" og "Bla neste".              '
  139.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  140.     Private Sub visInformasjonITekstbokser(ByVal post As StudentPost)
  141.         With post  'argumentet post er nå som en lokal variabel å regne
  142.             txtNavn.Text = .Navn   'uten With: txtNavn.Text = minStudent.Navn
  143.             txtKlasse.Text = .Klasse
  144.             txtEpost.Text = .EPost
  145.             txtFodselsdato.Text = .Bursdag
  146.         End With
  147.     End Sub
  148.  
  149.  
  150.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  151.     ' Navn:         fjernTekstFraTekstFelter                                 '
  152.     ' Argumenter:   Ingen                                                    '
  153.     ' Hva skjer?    Fjerner det som ligger i tekstfeltene.                   '
  154.     ' Merk:         Dette er en egendefinert prosedyre som må kalles fra     '
  155.     '               steder der en ønsker å slette tekstfeltenes innhold, for '
  156.     '               eksempel i knappen "Blank ut felter".                    '
  157.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  158.     Private Sub fjernTekstFraTekstFelter()
  159.         txtNavn.Text = ""
  160.         txtKlasse.Text = ""
  161.         txtEpost.Text = ""
  162.         txtFodselsdato.Text = ""
  163.     End Sub
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.     '-----------------------------------------------------------------------------------------------------------
  173.     ' Knapp:    Sletter gjeldende post
  174.     ' Strategi: Har riktig posisjon allerede, så det er bare å manipulere innholdet
  175.     '           i den posten som Posisjon peker mot.
  176.     '           Sletter opplysningene ved å sette inn teksten slettet hvor studentens navn er
  177.     '           Blanker også ut de andre feltene og setter datoen til 1.1.3000  (som ingen kan være født på)
  178.     ' Merk:     Se også kommentarene helt øverst i koden.
  179.     '           Posisjon endres ikke her, men i en fullgod løsning bør den også oppdateres til noe forutsigbart
  180.     '-----------------------------------------------------------------------------------------------------------
  181.     Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
  182.         Dim bekreft As Integer = MsgBox("Vil du virkelig slette denne studenten?")
  183.         If bekreft = vbOK Then
  184.             With minStudent
  185.                 .Navn = "SLETTET"
  186.                 .Klasse = ""
  187.                 .EPost = ""
  188.                 .Bursdag = CDate("1.1.3000")  'å nullstille en dato betyr å velge en dato vi selv mener er null
  189.             End With
  190.             fjernTekstFraTekstFelter()  'Indikerer overfor brukeren at posten ble slettet
  191.             FilePut(FilNummer, minStudent, Posisjon)  'Skriver informasjonen til fil, nå med tekst slettet
  192.             MsgBox("Studenten ble slettet")  'Gir en bekreftende beskjed
  193.         Else
  194.             MsgBox("Studenten ble ikke slettet")  'Hvis Avbryt trykkes slettes ingenting
  195.         End If
  196.  
  197.         'MERK: Posisjon er ikke endret.
  198.     End Sub
  199.  
  200.  
  201.  
  202.  
  203.     '-----------------------------------------------------------------------------------------------------------
  204.     ' Knapp:    Åpne filen
  205.     ' Strategi: Åpner filen og klargjør alt for bruk.
  206.     '           - Når denne knappen trykkes, vil enten
  207.     '               a) en ny fil lages dersom det ikke eksisterer noen fil fra før.
  208.     '               b) eksisterende fil åpnes, og første post leses inn i tekstfeltene.
  209.     ' Merk:     - Postlengden er 68 (30+5+25+8).
  210.     '           - Posisjon initialiseres enten til 1 eller 0.
  211.     '           - Denne knappen må trykkes før noe annet. Det er en litt dum løsning. En bedre strategi
  212.     '             er å legge inn koden i form_load-prosedyren, så klargjørs filen i det programmet starter.
  213.     '           - Skriver posisjonen til tekstfeltet txtViserPostNr
  214.     ' Kaller:   Prosedyren VisInformasjonITekstbokser   [definert øverst i koden]
  215.     '-----------------------------------------------------------------------------------------------------------
  216.     Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
  217.         'Henter det neste tilgjengelige filnummeret vha innebygd funksjon.
  218.         FilNummer = FreeFile()
  219.  
  220.         'Åpner filen med FileOpen setningen. Her spesifiserer vi det
  221.         'logiske filnummeret, den fysiske adressen til filen, modus,
  222.         'lar to argumenter stå tomme, og angir tilslutt lengde på posten
  223.         FileOpen(FilNummer, "student.dat", OpenMode.Random, , , postLengde)
  224.  
  225.         'Finner hvor mange studenter det er i registeret
  226.         'ved å dele fillengden på postlengden
  227.         Antall = FileLen("student.dat") / postLengde
  228.  
  229.         'Hvis det finnes noe på filen, er det registrert studenter fra før.
  230.         'Strategien er å lese første post fra filen inn i en variabel
  231.         'og så legge innholdet i denne variabelen ut på skjerm.
  232.         'Samtidig oppdaterer vi posisjonspekeren slik at vi vet hvor
  233.         'på filen vi skal lese fra neste gang. Dette er viktig!
  234.         If Antall > 0 Then
  235.             'Leser inn den studenten som ligger i første post på
  236.             'filen, og legger denne posten inn i variabelen minStudent
  237.             FileGet(FilNummer, minStudent, 1)
  238.  
  239.             ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  240.             ' NYTT: Skriver ut informasjonen på skjerm i tekstbokser '
  241.             ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  242.             visInformasjonITekstbokser(minStudent)
  243.  
  244.             'Holder rede på hvor vi er kommet i filen
  245.             Posisjon = 1
  246.         Else
  247.             Posisjon = 0  'Dersom filen er tom, settes Posisjon til 0.
  248.         End If
  249.         'Oppgir hvilken post som vises nå
  250.         txtViserPostNr.Text = Posisjon
  251.  
  252.     End Sub
  253.  
  254.  
  255.  
  256.  
  257.     '-----------------------------------------------------------------------------------------------------------
  258.     ' Knapp:    Blanke ut tekstfeltene
  259.     ' Strategi: Blanker ut, og gir deretter fokus til tekstfeltet, slik at det bare er å skrive rett inn.
  260.     '-----------------------------------------------------------------------------------------------------------
  261.     Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
  262.         'Blanker ut tekstfeltene på skjermen
  263.         txtNavn.Text = ""
  264.         txtKlasse.Text = ""
  265.         txtEpost.Text = ""
  266.         txtFodselsdato.Text = ""
  267.  
  268.         'Gir fokus til første tekstfelt
  269.         txtNavn.Focus()
  270.     End Sub
  271.  
  272.  
  273.  
  274.  
  275.     '-----------------------------------------------------------------------------------------------------------
  276.     ' Knapp:    Lagre på fil
  277.     ' Strategi: Det som ligger i tekstfeltene på skjerm, lagres i en ny post på fil
  278.     '           - For å skrive til en ny post, må Antall oppdateres til å reflektere at det nå er flere
  279.     '             poster på fil.
  280.     '           - Posisjon må oppdateres, slik at bla-knappene fungerer slik de skal.
  281.     ' Merk:     Angående innlegging av Bursdag, må vi være litt forsiktige.
  282.     '           - Hvis feltet txtFodselsdato er tomt, vil en tom streng overføres.
  283.     '           - Det vil faktisk medføre at programmet kræsjer. En blank dato skal
  284.     '             nemlig skrives som en gyldig dato, ikke som tom streng.
  285.     '           - En løsning på dette er å late som at 1.1.3000 er det samme som å nullstille dato.
  286.     '             Det går fordi 1.1.3000 trolig aldri vil bli brukt i programmet.
  287.     ' Kaller:   Prosedyren fjernTekstFraTekstFelter   [definert øverst i koden]
  288.     '-----------------------------------------------------------------------------------------------------------
  289.     Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
  290.         'Antall som er lagt inn fra før ligger i variabelen Antall.
  291.         'Vi må skrive studentinformasjonen til neste post etter denne.
  292.         'Vi må huske på å ikke overskrive gamle,
  293.         'derfor oppdaterer vi antallet med en ekstra.
  294.         Antall = Antall + 1
  295.  
  296.         'Antallet sier hvor mange poster som vi har på filen til nå
  297.         'Posisjon sier hvor neste post skal skrives. 'Siden vi skal ha
  298.         'en ny post på slutten av filen blir Posisjon og Antall det samme.
  299.         Posisjon = Antall
  300.  
  301.         'Overfører verdiene fra tekstboksene til feltene i studentPost
  302.         With minStudent
  303.             If txtFodselsdato.Text = "" Then
  304.                 .Bursdag = CDate("1.1.3000")  'å nullstille en dato betyr å velge en dato vi selv mener er null
  305.             Else
  306.                 .Bursdag = CDate(txtFodselsdato.Text)  'gjør om til dato først. Bruker kan finne på å skrive mange ulike formater her
  307.             End If
  308.             .Navn = txtNavn.Text
  309.             .Klasse = txtKlasse.Text
  310.             .EPost = txtEpost.Text
  311.         End With
  312.  
  313.         'Skriver hele posten til datafilen
  314.         'Legg merke til at den legges i i filen som det postnr som er angitt i variablen Posisjon.
  315.         'Kunne også brukt variabelen Antall (siden den tilfeldigvis har samme verdi som Posisjon),
  316.         'men det er litt mer sølete og ikke så intuitivt. Vi skriver til en posisjon (med Posisjon)
  317.         'og filen har til enhver tid et visst antall poster (Antall) som innhold. Bruk disse riktig!
  318.         FilePut(FilNummer, minStudent, Posisjon)
  319.  
  320.         'Blanker ut tekstfeltene for å vise tydelig at ting ble lagret.
  321.         'Har laget en prosedyre for dette, kaller den.
  322.         'Prosedyren er definert øverst i koden.
  323.         fjernTekstFraTekstFelter()
  324.  
  325.         'Oppgir hvilken post som vises nå = ingen (fordi vi lagret)
  326.         txtViserPostNr.Text = ""
  327.     End Sub
  328.  
  329.  
  330.  
  331.  
  332.     '-----------------------------------------------------------------------------------------------------------
  333.     ' Knapp:    Avslutt
  334.     ' Strategi: Lukke filen og deretter avslutte programmet. Hvis ikke det gjøres, vil filen være åpen.
  335.     '           noe som er uheldig.
  336.     '-----------------------------------------------------------------------------------------------------------
  337.     Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
  338.         FileClose(FilNummer)
  339.         MsgBox("Filen er lukket")
  340.         End     'lukker skjemaet, og dermed også programmet    
  341.     End Sub
  342.  
  343.  
  344.  
  345.  
  346.     '-----------------------------------------------------------------------------------------------------------
  347.     ' Knapp:    Bla forrige
  348.     ' Strategi: Blar bakover i filen
  349.     '           - Kan ikke bla lenger bak enn til første post
  350.     '           - Reduserer posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på første post.
  351.     ' Merk:     Ikke noe spesielt
  352.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  353.     '-----------------------------------------------------------------------------------------------------------
  354.     Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
  355.         'Før vi blar oss bakover i filen, tester vi på at vi ikke er på
  356.         'den 1. studenten. I såfall er det ingen flere å bla bakover mot.
  357.         If Posisjon >= 1 Then
  358.             If Posisjon > 1 Then
  359.                 'Minker posisjonen hvor vi er i registeret med 1
  360.                 'men ikke dersom posisjonen er nøyaktig lik 1
  361.                 Posisjon = Posisjon - 1
  362.             End If
  363.  
  364.             'Henter studenten fra registeret med utgangspunkt i
  365.             'hvor posisjonspekeren er rettet mot
  366.             FileGet(FilNummer, minStudent, Posisjon)
  367.  
  368.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  369.             'MERK:  Innebærer å kalle den egendefinerte
  370.             '       prosedyren visInformasjonITekstbokser
  371.             visInformasjonITekstbokser(minStudent)
  372.         End If
  373.  
  374.         'Oppgir hvilken post som vises nå
  375.         txtViserPostNr.Text = Posisjon
  376.     End Sub
  377.  
  378.  
  379.  
  380.  
  381.     '-----------------------------------------------------------------------------------------------------------
  382.     ' Knapp:    Bla neste
  383.     ' Strategi: Blar forover i filen
  384.     '           - Kan ikke bla lenger enn til siste post
  385.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  386.     ' Merk:     Kan ikke bla i det hele tatt dersom filen er tom (Posisjon = 0).
  387.     '           Her er det lett å gjøre feil siden en gjerne lager en fil først, og så tester programmet hele tiden
  388.     '           mens denne filen har innhold.
  389.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  390.     '-----------------------------------------------------------------------------------------------------------
  391.     Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
  392.         'Før vi blar oss framover i filen, tester vi på om det er flere
  393.         'å bla i i det hele tatt. Bare hvis så, fortsetter vi
  394.         If Posisjon <= Antall And Posisjon <> 0 Then
  395.             If Posisjon < Antall Then
  396.                 'Øker posisjonen hvor vi er i registeret med 1
  397.                 'men ikke dersom posisjonen er nøyaktig lik Antall
  398.                 Posisjon = Posisjon + 1
  399.             End If
  400.  
  401.             'Henter denne studenten fra registeret
  402.             FileGet(FilNummer, minStudent, Posisjon)
  403.  
  404.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  405.             'MERK:  Innebærer å kalle den egendefinerte
  406.             '       prosedyren visInformasjonITekstbokser
  407.             visInformasjonITekstbokser(minStudent)
  408.         End If
  409.  
  410.         'Oppgir hvilken post som vises nå
  411.         txtViserPostNr.Text = Posisjon
  412.     End Sub
  413.  
  414.  
  415.  
  416.  
  417.     '-----------------------------------------------------------------------------------------------------------
  418.     ' Knapp:    Gå til siste post
  419.     ' Strategi: Viser siste post i filen, dersom filen har poster
  420.     '           - Kan ikke bla lenger enn til siste post
  421.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  422.     ' Merk:     Må oppdatere Posisjon.
  423.     '           - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
  424.     '             men bare brukt Antall direkte, tror du?
  425.     '           - Svaret er at neste gang du klikker på for eksempel Forrige, og posisjon ikke er oppdatert
  426.     '             vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
  427.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  428.     '-----------------------------------------------------------------------------------------------------------
  429.     Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
  430.         'Skal hoppe til siste post og vise opplysningene i tekstfeltene
  431.         'Setter posisjonen til Antall siden vi nå skal til siste post
  432.  
  433.         'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
  434.         If Antall > 0 Then
  435.             Posisjon = Antall   'Antall er siste plass
  436.  
  437.             ' Henter studenten fra registeret med utgangspunkt i
  438.             ' hvor posisjonspekeren er rettet mot
  439.             FileGet(FilNummer, minStudent, Posisjon)
  440.  
  441.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  442.             'MERK:  Innebærer å kalle den egendefinerte
  443.             '       prosedyren visInformasjonITekstbokser
  444.             visInformasjonITekstbokser(minStudent)
  445.  
  446.             'Oppgir hvilken post som vises nå
  447.             txtViserPostNr.Text = Posisjon
  448.         End If
  449.     End Sub
  450.  
  451.  
  452.  
  453.  
  454.     '-----------------------------------------------------------------------------------------------------------
  455.     ' Knapp:    Gå til første post
  456.     ' Strategi: Viser siste post i filen, dersom filen har poster
  457.     '           - Kan ikke bla lenger enn til siste post
  458.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  459.     ' Merk:     Må oppdatere Posisjon.
  460.     '           - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
  461.     '             men bare brukt tallet 1 direkte, tror du?
  462.     '           - Svaret er at neste gang du klikker på for eksempel Neste, og posisjon ikke er oppdatert
  463.     '             vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
  464.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  465.     '-----------------------------------------------------------------------------------------------------------
  466.     Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
  467.         'Skal hoppe til første post og vise opplysningene i tekstfeltene
  468.         'Setter posisjonen til 1 siden vi nå skal til første post
  469.  
  470.         'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
  471.         If Antall > 0 Then
  472.  
  473.             Posisjon = 1
  474.  
  475.             ' Henter studenten fra registeret med utgangspunkt i
  476.             ' hvor posisjonspekeren er rettet mot
  477.             FileGet(FilNummer, minStudent, Posisjon)
  478.  
  479.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  480.             'MERK:  Innebærer å kalle den egendefinerte
  481.             '       prosedyren visInformasjonITekstbokser
  482.             visInformasjonITekstbokser(minStudent)
  483.  
  484.             'Oppgir hvilken post som vises nå
  485.             txtViserPostNr.Text = Posisjon
  486.         End If
  487.     End Sub
  488.  
  489.  
  490.  
  491.  
  492.     '-----------------------------------------------------------------------------------------------------------
  493.     ' Knapp:    Form_Load (altså ingen knapp, men det som skjer når programmet starter)
  494.     ' Strategi: Det er viktig at brukeren trykker på knappen "Åpne fil" før noe annet klikkes på.
  495.     '           Det er fort gjort å glemme dette. Derfor vises en beskjed hvor dette påpekes ettertrykkelig.
  496.     '           Noe som er enda smartere, er å legge koden fra "Åpne fil" inn i Form_Load. Da slipper brukeren å
  497.     '           tenke på at filen i det hele tatt må åpnes.
  498.     '-----------------------------------------------------------------------------------------------------------
  499.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  500.         MsgBox("Husk å åpne filen først" & vbLf & "Du må klikke på knappen ""Åpne fil"" før du gjør noe annet")
  501.     End Sub
  502. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement