Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Notepad

Postades av 2001-04-29 09:36:00 - Håkan Nilsson, i forum visual basic - allmänt, Tråden har 14 Kommentarer och lästs av 667 personer

Efter att jag har skapat en liten textfil vill jag öppna denna direkt med notepad. Det är inga problem att öppna notepad, men jag får inte till det med att hämta värdet från en textbox. Se exempel.

Call Shell("notepad.exe [här vill jag hämta filnamnet från en textbox]", 1)

någon som vet?

/hani


Svara

Sv: Notepad

Postades av 2001-04-29 09:57:00 - Sven Åke Persson

Hej
Ett exempel som jag har användt, Anteckningar.txt
ligger i samma mapp som min exefil

ret = Shell("NotePad.exe " & Text1.Text, vbNormalFocus)

Private Sub mnuNotePad_Click()
Dim ret As Long
On Error GoTo NotepadError
ret = Shell("NotePad.exe " & _
App.Path & "\Anteckningar.txt", vbNormalFocus)
Exit Sub
NotepadError:
MsgBox ("Kunde inte hitta fil NotePad.exe")
End Sub

mvh
Sven



Svara

Sv: Notepad

Postades av 2001-04-29 12:07:00 - Andreas Hillqvist

För att leva upp till min nya titel "TjaffsNissen", måste jag anmärka att man inte ska omge parametrar till subrutin anropet. Om man inte använder sig av Call.

Vad parantesen gör i deta fallet är att utvärdera vilkoret. Vilket ger fel om man anger mer en ett argument. T.Ex

MsgBox (Err.Description,vbCritical )

Detta beror på att VB inte kan utvärdera uttrycket (Err.Description,vbCritical ) och retunera det som första argumentet. Därför bör man skriva:

MsgBox Err.Description, vbCritical

Om man dock vill använda sig av paranteser får ange Call framför.

Call MsgBox (Err.Description, vbCritical)

Man kan omge parametrarna med paranteser:

MsgBox (Err.Description), (vbCritical)

Fast detta är ju onödigt, men jag tar med det här exemplet för visar vad det är man egentligen gör när man omger första parametern inom paranteser.

Det kan ochså ställa till med problem ifall parametern är ett objekt med en default egenskap. T.Ex.

Private Sub Command1_Click()
ClearTextBox (Text1)
End Sub

Private Sub Command2_Click()
ClearTextBox Text1
End Sub


Private Sub ClearTextBox(TextBox As TextBox)
TextBox.Text = ""
End Sub

Koden i Command1 kommer ge felmeddelandet Type missmatch. Deta för att vb har utvärderat Text1 och retunerat Text egenskapen vilket är defaultegenskapen för text objekte. Eftersom detta är en sträng och subrutinen förväntar sig ett objekt ger det ett fel.

Som tur är har Microsoft bestämt sig för att korrigera detta i VB.NET där man alltid anger parametrar inom paranteser...


Svara

Sv: Notepad

Postades av 2001-04-29 14:06:00 - Sven Åke Persson

Hej
"Ständigt denna vessla"

mvh
Sven


Svara

Sv: Notepad

Postades av 2001-04-29 14:43:00 - Ivar Torstensson

Vad menar du med det Sven? Är det något fel att Andreas rättar felaktig kod?

/Ivar


Svara

Sv: Notepad

Postades av 2001-04-29 15:17:00 - Sven Åke Persson

Hej
>Är det något fel att Andreas rättar felaktig kod?

Då måste jag stillsamt fråga vad är det som är
fel i den kod jag visar på.

mvh
Sven


Svara

Sv: Notepad

Postades av 2001-04-29 16:42:00 - Ivar Torstensson

Som Andreas skrev, man skall inte omge parametrar i funktioner med paranteser om man inte tilldelar en variabel svaret eller skriver call framför.
Kanske passar bra med ett citat här: "Det går ju att göra så, men det är inte rätt"

/Ivar


Svara

Sv: Notepad

Postades av 2001-04-29 17:28:00 - Sven Åke Persson

Hej
Förmodar att Ni syftar på MsgBox

Då kommer nästa fråga gäller inte denna Syntax

Function Syntax

MsgBox(msg[,[type][,title]])
*****************************

Statement Syntax

MsgBox msg[,[type][,title]]

mvh
Sven


Svara

Sv: Notepad

Postades av 2001-04-29 18:16:00 - Andreas Hillqvist

Det är olyckligt att det är så.

Korrekt syntax om du inte tar emot retunerat värde eller använder dig av call är utan paranteser oavsett om det är en funktion eller subrutin...

Ja det går faktist att anropa en funktion utan att ta emot värdet eller använda sig av Call...

Ex.

Private Sub Form_Load()
Test "Ett", "Två", "Tre"
End Sub

Function Test(Value1 As Variant, Value2 As Variant, Value3 As Variant) As Variant
MsgBox Value1
MsgBox Value2
MsgBox Value3
End Function


Svara

Sv: Notepad

Postades av 2001-04-29 18:56:00 - Sven Åke Persson

Hej
Du slingrar dig som en metmask på kroken.
Antinge gäller syntaxen eller så gäller den inte .

Förresten vilka källor referear du till med dina påstående.

DS


Svara

Sv: Notepad

Postades av 2001-04-29 19:08:00 - Andreas Hillqvist

Det är information som jag ackumelerat. Vet inte varifrån den kommer. Men stämmer gör den ju. Det är ju bara att testa, använda logik och dra korrekt slutsattser...


Svara

Sv: Notepad

Postades av 2001-04-29 19:28:00 - Andreas Hillqvist

Påstår du att jag har fel?


Svara

Sv: Notepad

Postades av 2001-04-29 20:58:00 - Peter Holm

Men förh...e lägg av. Bete er som vuxna människor här i forumet.

Felets är Microsofts och ingen annans. Om ett språk tillåter en att
programmera enligt en viss stil är detta inte fel. Bara mer eller mindre
bra.

Jag lägger mig i denna diskussion eftersom det verkar som så att jag
är en av dom få som är utbildad inom datavetenskap som yttrar sig
i forumet. (Inte för att jag menar att ni andra inget kan, ni självlärda
men jag kanske har en annan vinkling som ni inte har) So please here
me out.

I ett programmeringsspråk finns egentligen bara funktioner. Subrutiner
är bara ett namn på en funktion som saknar returvärde.

Nu är det dock inte så enkelt.

Microsoft har verkligen lyckats röra till det. En funktion skall utan
undantag alltid skicka ett returvärde.

y = f(x); är en funktion som returnerar ett resultat beroende på inparametern x

I VB kan man dock TYVÄRR skita i returvärdet och det är där som det
egentliga problemet ligger.

Man borde enligt min mening inte kunna skriva så här:

Private Function F(X as integer)
'Kod
End Sub

Detta borde generera ett fel. Men så är det inte i VB.

i C åtgärdas detta automatiskt då subrutiner inte existerar utan att man
där måste deklararea sina subrutiner som en funktion utan returvärde

void F(int X) {
/* Kod */
}

Där uppstår alldrig problemet.

I VB kan du göra följande utan att du får fel


Sample Code ===============================

Option Explicit

Private Sub Command1_Click()
Dim a As Integer
a = testar(2) '(1)
testar 2 '(2)
testar (2) '(3)
End Sub

Private Function testar(i As Integer) As Integer
testar = i + 20
End Function

Sample Code ===============================

(1) -- Detta är det mest korrekta sättet att anropa en funktion.
(2) -- Med detta sätt skall man istället deklarera en subrutin "Sub"
(3) -- Detta är ett mellanting. Du anropar som om det vore en funktion
och en subrutin på samma gång. Det är här som Microsoft inte
lyckats.

Så sluta gnabba. Om VB tillåter något är det inte fel. Däremot kan jag
hålla med om att det är bättre att inte använda parenteser runt sub-
rutinanrop.


Svara

Sv: Notepad

Postades av 2001-04-29 22:25:00 - Andreas Hillqvist

Jag är förvånad att du som är påläst inte förstår vad som händer...

Option Explicit

Private Sub Command1_Click()
Dim a As Integer
a = testar(2) '(1)
testar 2 '(2)
testar (2) '(3)
End Sub

Private Function testar(i As Integer) As Integer
testar = i + 20
End Function

I ditt exempel skiljer sig inte exempel 2 och 3 i anropet.

Parantesen har samma funktion som den har i en matematisk uttryck. t.ex

Dim I as Integer
I = 1 * (2 + 3)

Den får uttrycket att utvärderas.

Låtås bevisa detta ytterligare genom att lägga till en parameter:

Private Sub Command1_Click()
Dim a As Integer
a = testar(2, 20) '(1)
testar 2, 20 '(2)
testar (2, 20) '(3)
End Sub

Private Function testar(Value1 As Integer, Value2 As Integer) As Integer
testar = Value1 + Value2
End Function

Nu ger exempel 3 syntax fel. Vist är det underligt?
Nej egentligen är det uppenbar...

Låt oss utvärdera vilkoret i sin egen sats.

Dim I as Integer
I = 1 * (2, 3)

Om vi ser på det här exemplet så är det ju uppenbart att det strider mot syntax i Vb.

Slutsats:
Syntax som bör användas är 3 st och det är följande:

Private Sub Command1_Click()
Dim a As Integer
a = testar(2, 20) '(1)
testar 2, 20 '(2)

Call testar(2, 20) '(4)

End Sub

Private Function testar(Value1 As Integer, Value2 As Integer) As Integer
testar = Value1 + Value2
End Function


Om det nu inte finns någon somm håller med mig ber jag dig nogrant studera tidigare inläg. Testa dessa inlägg i VB. Du kommer nog finna att det stämmer...


/Mvh, Andreas Hillqvist


Svara

Sv: Notepad

Postades av 2001-04-30 07:08:00 - Peter Holm

OK Andreas jag ger mig, du har rätt.
Jag orkar inte argumentera.

Var nog inne på lite för mycket C tor jag.

/peterh


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
518
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies