Avatar billede mc.lucifer Praktikant
10. december 2002 - 10:32 Der er 31 kommentarer og
1 løsning

Afslut i VB

Hvordan afslutter jeg et program i VB

Me.Hide kan jo ikke løse det, Men en funktion der helt afslutter programmet hvordan laves det ?
MC
Avatar billede bennytordrup Nybegynder
10. december 2002 - 10:33 #1
me.close
Avatar billede mc.lucifer Praktikant
10. december 2002 - 10:35 #2
Private Sub Afslut_Click()
Svar = MsgBox("Ønsker du at afslutte", vbOKCancel)
If Svar = vbOK Then
Me.Close
End If
End Sub

Det virker sku ikke
MC
Avatar billede bennytordrup Nybegynder
10. december 2002 - 10:41 #3
Unload Me
Exit Sub
Avatar billede mc.lucifer Praktikant
10. december 2002 - 10:45 #4
Ja vi må jo se om det er det der skal til for den afslutter fint nok men den er stadig i runing mode i VB men vi må lige se om den afslutter når den er compilet til EXE
Jeg vender lige tilbage

MC
Avatar billede bennytordrup Nybegynder
10. december 2002 - 10:52 #5
Hvis den stadig er i running mode i VB, så har du ikke fået unloaded alle forms.

dim F as frm
for each f in forms
  if not (f is me) then unload f
next f
unload me
Avatar billede Slettet bruger
10. december 2002 - 11:23 #6
du skal bare skrive

Private Sub Afslut_Click()
Svar = MsgBox("Ønsker du at afslutte", vbOKCancel)
If Svar = vbOK Then
end
End If
End Sub
Avatar billede martin_moth Mester
10. december 2002 - 11:23 #7
Hvad med:

Private Sub Afslut_Click()
  Svar = MsgBox("Ønsker du at afslutte", vbOKCancel)
  If Svar = vbOK Then End
End Sub
Avatar billede martin_moth Mester
10. december 2002 - 11:24 #8
Aaargh - der var jeg IGEN for langsom - helt præcist 33 sekunder ;o)
Avatar billede bennytordrup Nybegynder
10. december 2002 - 11:25 #9
johan, martin_moth>> Brug af End i VB er en dødssynd. End afslutter programudførslen øjeblikkelig uden at lade programmet rydde op efter sig i hukommelsen og diverse andre ting.

Hvis man bruger avancerede ting som subclassing i VB og bruger End, så kan du i værste fald komme ud i, at du skal genstarte.
Avatar billede Slettet bruger
10. december 2002 - 11:27 #10
benny.tordrup -> vi er enige om at man skal kuske at ryde op efter sig, men der er ikke noget galt i at bruge end, men det var jo ikke et oprydnings spørgsmål :-)
Avatar billede bennytordrup Nybegynder
10. december 2002 - 11:33 #11
johan>> Jo, for du får ikke ryddet op efter dig ved brug af end. mc indikerer, at programmet stadig er i running mode efter unload me, og det betyder, at der ikke er rydded op. Den hukommelse, der bliver brugt til ikke unloadede forms bliver ikke frigivet med End.
Avatar billede martin_moth Mester
10. december 2002 - 13:25 #12
benny.tordruop >> Hmm - på mit kursus i VB lærte jeg at bruge End til at afslutte VB. Men så må jeg jo have lært en uskik (beklager, at jeg nu vidergiver uskikken) -
  Men hvis man har en knap til at afslutte sit program, hvad i alverden skal man så bruge, hvis man ikke må bruge End?
Avatar billede bennytordrup Nybegynder
10. december 2002 - 13:29 #13
Fra MSDN (Hjælpen) omkring End statement:

<Snip>
Note  The End statement stops code execution abruptly, without invoking the Unload, QueryUnload, or Terminate event, or any other Visual Basic code. Code you have placed in the Unload, QueryUnload, and Terminate events of forms and class modules is not executed. Objects created from class modules are destroyed, files opened using the Open statement are closed, and memory used by your program is freed. Object references held by other programs are invalidated.

The End statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing.
</Snip>
Avatar billede bennytordrup Nybegynder
10. december 2002 - 13:31 #14
martin_moth >> Undskyld, jeg siger det, men jeg vil stille spørgsmålstegn ved underviserens kompetence. At undervise i ting, der er i modstrid med hjælpens oplysninger. Det vil kræve en *særdeles* god forklaring.
Avatar billede mc.lucifer Praktikant
10. december 2002 - 13:44 #15
Kigger stadig med fra side linien og leder stadig efter hvad jeg skal skrive i min knap *G*

MC
Avatar billede bennytordrup Nybegynder
10. december 2002 - 13:47 #16
Private Sub Afslut_Click()
Svar = MsgBox("Ønsker du at afslutte", vbOKCancel)
If Svar = vbOK Then
dim F as frm
for each f in forms
  if not (f is me) then unload f
next f
exit sub
End If
End Sub
Avatar billede martin_moth Mester
10. december 2002 - 13:52 #17
benny.borup >> Nu har underviseren ikke sagt noget om End, andet at det kan bruges til at afslutte et program - og det er jo rigtigt :o)

Og der står jo netop, at "memory used by your program is freed"

Så jeg kan faktisk ikke forstå, at der skulle være noget som helst i vejen med at bruge End i et program

Man skal så bare vide, at man ikke får kørt den kode der evt. ligger i UnLoad, QueryUnload events osv - men det problem kan man jo bare kode sig ud af.

Så vidt jeg kan se "sviner" end ikke som du siger - den rydder derimod pænt op i memoryen (står der), og den lukker endda eventuelle filer, der er åbnede (det kunne man også have kodet sig ud af)

Såå - hvad er egentligt problemet med End?
Avatar billede slumtiger Nybegynder
10. december 2002 - 13:53 #18
unload frigiver resurserne og er i reglen nok til at afslutte et program. Men for en sikkerheds skyld så brug også END. Brug også form_terminate eller form_unload, hvis der refereres til en unloaded form så loades den.

MainForm_terminate
  unload form1
  unload form2
  unload formx
  end
Avatar billede bennytordrup Nybegynder
10. december 2002 - 13:58 #19
Jeg fremhæver lige følgende:


The End statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing.
Avatar billede bennytordrup Nybegynder
10. december 2002 - 13:59 #20
Læg mærke til, at der anvises en metode til at gennemføre en *normal* afslutning af programmet.
Avatar billede martin_moth Mester
10. december 2002 - 14:49 #21
Læg mærke til, at der også står, at den frigør hukommelsen, altså ganske modsat hvad du skrev til at starte med... Jeg vil således stadig hævde, at man sagtens kan bruge End i en masse VB-programmer, såfremt man bare tager sine forholdsregler ;o)

Men jeg er da blevet klar over, at UnLoad er "pæne" måde at gøre det på - så den vil jeg bruge fremover :o)
Avatar billede kjeld_klit Nybegynder
10. december 2002 - 16:09 #22
Jeg vil også lære at lukke "rigtigt"(?)
Hvis man kigger under 'Unload' i MSDN står der også:

"Note  When a form is unloaded, only the displayed component is unloaded. The code associated with the form module remains in memory."

Det forstår jeg sådan at det ikke er nok at unloade, men bør efterfølges af: End.
Avatar billede bennytordrup Nybegynder
10. december 2002 - 16:32 #23
Nej, den skal følges af en "set Frm = nothing"
Avatar billede kjeld_klit Nybegynder
10. december 2002 - 16:58 #24
OK - det var alligevel nyt for mig ;-)
Hvis man har brugt undload...nothing, er det så fuldstændig ryddet op, altså ikke nogen grund til 'End'?
(Sjovt nok er jeg vant til at bruge nothing i fbm. databaser: Set RS = Nothing)
Avatar billede martin_moth Mester
10. december 2002 - 17:22 #25
I de tilfælde hvor man har et program, der ikke har "kontakt til omverdenen" (dvs. åbnet fil eller DB, bruges af andre programmer osv) ville jeg foretrække at skrive:

  End

i stedet for
  ...
  form3.unload
  form2.unload
  Form1.unload
  ...
  Set form3 = nothing
  Set form2 = nothing
  Set form1 = nothing

I masser(!!!) af programmer vil man 100% problemfrit kunne bruge End, fx. dette

Private sub Form_load()
  command1.caption = "afslut" 
  msgbox "hej, bare luk programmet nu"
End sub

Private sub Command1_click()
  end
End sub

Men som altid - man må lige overveje om den bratte afslutning med End giver komplikationer - måske har man nogle objekter, der lige skal sættes lig Nothing først ;o)

Summa sumarum:

Den korrekte måde er åbenbart at bruge unload og Nothing
Man kan dog sagtens bruge End, sålænge man tager højde for dens virkemåde. Gør man det, er der intet i vejen for at bruge End.

Kan vi koge mere suppe på den længere...? (gæk gæk ;o)

Over and Out - nu skal jeg nok lade være med at blande mig mere :oD
Avatar billede lovix Nybegynder
11. december 2002 - 20:34 #26
Det er faktisk meget simpelt! De andre har bare fået det til at se lidt sværere ud!
Bare skriv:
End
Under den Sub der skal afslutte!

-LoViX-
Avatar billede ducks Nybegynder
13. december 2002 - 11:27 #27
End kan give problemer når du arbejder i runtime, kan den finde på at lukke VB helt.
Ellers brug Unload Me

(Sorry hvis det er posted)
Avatar billede lovix Nybegynder
16. december 2002 - 14:04 #28
>>ducks
Den fejl du skriver om er nu aldrig sket hjemme hos mig.
-!
Avatar billede mc.lucifer Praktikant
17. december 2002 - 09:34 #29
Øhhh jeg har sku lige et mindre side problem her, Jeg har fundet ud af at End virker fint i mit tilfælde, men hvordan fanden skal jeg dele pointene i mellem jer

15 Point til 5 menesker = 3 Point til hver, Hmm lidt at tage røven på folk

MC
Avatar billede mc.lucifer Praktikant
17. december 2002 - 09:34 #30
6 menesker sorry
MC
Avatar billede Slettet bruger
17. december 2002 - 11:37 #31
Du behøver ikke at give mig point, det har bare været skægt at se hvor meget der kunne komme ud af det spørgsmål :-)
Avatar billede mc.lucifer Praktikant
26. december 2002 - 21:41 #32
Du vinder alligev Johan da du gav mig det svar som jeg benytter i dag nemlig End

MC
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