Avatar billede lillehans Nybegynder
06. december 2005 - 19:56 Der er 7 kommentarer og
1 løsning

Sub main, byreftest, byvaltest

Jeg sidder med en lærebog i VB og læser pludselig om en
1)Sub Main samt
2) om  ByRefTest og om ByValTest.
I bogen er nedenstående programstumper anført, der viser at en variabel kan blive forandret ved brug af ByRefTest men forblive uændret ved ByValTest.

ad1)Desværre forstår jeg ikke meningen med noget af det. Er der nogen der kan fortælle mig hvilket særligt formål en Sub Main har?

ad2)Og give mig et programeksempel på, hvordan jeg kan bruge ByRefTest og ByValTest i praksis.
(Det  er jo ikke noget formål i sig selv af lave nedenstående rutiner?) Eller det er der måske alligevel…

Option Explicit

Sub main()
Dim Variabel1 As Integer, Variabel2 As Integer
Variabel1 = 5
Variabel2 = 5
MsgBox "Variabel1 = " & Variabel1 & " før kald til ByRefTest."
ByRefTest Var1:=Variabel1
MsgBox "Variabel1 = " & Variabel1 & "efter kald til ByRefTest."

MsgBox "Variabel2 = " & Variabel2 & " før kald til ByValTest."
ByValTest Var1:=Variabel2
MsgBox "Variabel2 = " & Variabel2 & "efter kald til ByValTest."

End Sub

Public Sub ByValTest(ByVal Var1 As Integer)
Var1 = Var1 * 2
End Sub
Public Sub ByRefTest(Var1 As Integer)
Var1 = Var1 * 2

End Sub
Avatar billede thomaxz Nybegynder
06. december 2005 - 21:32 #1
Sub main, har den formål at starte f.eks. i stedet for en form.

det kan man så evt. bruge til at vise en splash screens mens man loader nolge indstilinger, ofr at vise hovedvinduet.
Avatar billede lillehans Nybegynder
07. december 2005 - 09:18 #2
hej thomaxz Tak for dit svar. Jeg synes ikke, at jeg får svar på det, som jeg spørger om, og så vidt jeg kan se, siger du ikke noget om byreftest byvaltest?
Kan du tydeliggøre det du skriver, for jeg er ikke blevet klogere.
Avatar billede thomaxz Nybegynder
07. december 2005 - 13:48 #3
så vidt jeg ved er forskellen at den ene kopiere variable over og ændre ikke den originale mens den anden sendere addressen til variable og bruger den.

jeg ved så ikke hvad det er hvad,og derfor jeg undlod at svare.
Avatar billede lillehans Nybegynder
07. december 2005 - 16:14 #4
hej thomaxz Jeg har vist nu fundet ud af det med main, så det skal du nok få points for. Men det andet...
Næh, jeg forstår stadig ikke meningen, og derfor så jeg gerne et eksempel.
Jeg lader spørgsmålet stå åbent til i morgen. Måske kommer der en løsning.
Avatar billede sjh Nybegynder
08. december 2005 - 16:17 #5
Når jeg kan da prøve om jeg kan forklar det så du forstår det :D


Option Explicit

' ByRef: Kan ændre den variabel som er kommet ind i strPath (strTestPath)
Public Function SplitPath(strPath As String) As String
Dim intRev As Long
  ' Finder den sidste slash (\) i strPath og retuner position.
  intRev = InStrRev(strPath, "\")
  ' Hvis intRev er større end 0, så fortsættes..
  If intRev > 0 Then
    ' Retuner filnavnet tilbage til SplitPath.
    SplitPath = Right$(strPath, Len(strPath) - intRev)
    ' Setter strPath = biblioteks dir (ByRef)
    ' Det vil ændre den variabel som er kommet ind i strPath (strTestPath)
    strPath = Left$(strPath, intRev)
  End If ' end intRev
End Function

'ByVal: Her kan vi bruge strPath som en ny variabel, uden at det ændre noget ved (strTestPath)
Public Function ReplacePath1(ByVal strPath As String) As String
'Dim strTemp As String
  ' Fjrener mellemrum i bægge ender Trim$()
  strPath = Trim$(strPath)
  ' Erstatter "/" med "\"
  strPath = Replace(strPath, "/", "\")
  ' Erstatter "\\" med "\" og retuner det.
  ReplacePath1 = Replace(strPath, "\\", "\")
End Function

' ByRef: Her må vi lave en ny variabel (strTemp) for at den ikke ændre på strPath (strTestPath)
Public Function ReplacePath2(strPath As String) As String
Dim strTemp As String
  ' Kopier strPath til strTemp
  strTemp = strPath
  ' Fjrener mellemrum i bægge ender Trim$()
  strTemp = Trim$(strTemp)
  ' Erstatter "/" med "\"
  strTemp = Replace(strTemp, "/", "\")
  ' Erstatter "\\" med "\" og retuner det.
  ReplacePath2 = Replace(strTemp, "\\", "\")
End Function

Private Sub Form_Load()
Dim strTestPath As String
Dim strTestFile As String
Dim strTestReplace As String

  ' ByRef test
  strTestPath = "C:\bla\bla\bla\file.txt"
  MsgBox "(1) strTestPath = " & strTestPath

  strTestFile = SplitPath(strTestPath)

  MsgBox "(2) strTestPath = " & strTestPath
  MsgBox "(3) strTestFile = " & strTestFile


  ' ByVal test
  strTestPath = "C://bla//bla//bla/file.txt"
  MsgBox "(4) strTestPath = " & strTestPath

  strTestReplace = ReplacePath1(strTestPath)
  ' Eller ByRef
  ' strTestReplace = ReplacePath2(strTestPath)

  MsgBox "(5) strTestPath = " & strTestPath
  MsgBox "(6) strTestReplace = " & strTestReplace

End Sub
Avatar billede lillehans Nybegynder
08. december 2005 - 18:09 #6
SJH Det må jeg studere nærmere, men jeg er sikker på, at dit svar er rigtigt, så jeg lukker for spørgsmålet nu. Mange tak for hjælpen.
Avatar billede lillehans Nybegynder
08. december 2005 - 18:12 #7
thomaxz - jeg kunne ikke finde ud af at fordele, så der er points til dig her:
http://exp.dk/spm/670689
Avatar billede thomaxz Nybegynder
08. december 2005 - 22:32 #8
ok.
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