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


Problem med Callbyname

Postades av 2003-12-11 01:31:11 - Martin Mart, i forum visual basic - allmänt, Tråden har 9 Kommentarer och lästs av 449 personer

har denna kod i formload:
i = 1
CallByName module1, "script" & i, VbMethod

har denna kod i module1:

Public Function script1()
MsgBox "script1"
End Function


Varför funkar inte Callbyname module1? Det funkar ju när jag lägger funktionen script1 i form1 och skriver:
CallByName form1


Jag vill helst ha mina funktioner i olika moduler för att få mer ordning på dem, eftersom de är ca 30 stycken...




Svara

Sv: Problem med Callbyname

Postades av 2003-12-11 06:20:39 - Mikael Jönsson

Prova

<code>
CallByName module1, CStr("script" & i), VbMethod
</code>

/Micke


Svara

Sv: Problem med Callbyname

Postades av 2003-12-11 07:16:43 - Per Hultqvist

Jag är ganska säker på att det beror på att CallByName förväntar sig ett objekt (en instans av en klass eller ett formulär eller en kontroll) och inte en modul. Module1 är ju inte en instans av ett objekt utan en "referens" till en kodfil i princip. I t ex C# så motsvaras det av statiska metoder i en klass, där man inte behöver skapa en instans av klassen för att anropa metoderna.

Testa att lägga metoderna i en klass och skapa en instans av klassen och anropa metoderna på denna :
<code>
Dim mFunc As cFunctions
Set mFunc=new cFunctions
i = 1
CallByName mFunc, "script" & i, VbMethod
</code>


Svara

Sv: Problem med Callbyname

Postades av 2003-12-11 16:37:27 - Oskar Johansson

En annan idé (vet ej om den fungerar): testa med "modulens_namn.script" & cstr(i) istället...


Svara

Sv: Problem med Callbyname

Postades av 2003-12-11 21:57:07 - Martin Mart

Jag är väldigt ny på detta med vb, så du får ursäkta men vad menar du med detta? Och hur gör jag det? Har aldrig använt mej av en klass...

"Testa att lägga metoderna i en klass och skapa en instans av klassen och anropa metoderna på denna:"

Tacksam för svar!
//Martin


Svara

Sv: Problem med Callbyname

Postades av 2003-12-11 22:10:20 - Niklas Jansson

Frågan är om du inte angriper problemet på fel sätt; en omstrukturering kan vara mycket enklare.
Vad gör dina funktioner, och varför behöver du anropa dem med CallByName?

Enda egentliga skälet jag skulle kunna se är om du måste göra 30 stycken helt skilda grejer och måste välja rätt utifrån en siffra man skriver in.
Eller eventuellt om du måste loopa igenom dem, men då känns det ändå som att det borde finnas nåt bra mycket enklare sätt.


Svara

Sv: Problem med Callbyname

Postades av 2003-12-12 00:05:35 - Martin Mart

"Enda egentliga skälet jag skulle kunna se är om du måste göra 30 stycken helt skilda grejer och måste välja rätt utifrån en siffra man skriver in."

Det är precis det jag ska göra. Fast 35 olika saker för att vara exakt. :)


Svara

Sv: Problem med Callbyname

Postades av 2003-12-12 12:00:28 - Daniel Hermansson

Callbyname var en nyhet för mig.

Jag skulle ha löst det så här (när jag inte visste att callbyname fanns ;) )


Private Sub Form_Load()

Dim i#
i = 2
Call test(i)

End Sub

Private Function test(i As Long)

Select Case i
Case 1
'Starta function1

Case 2
'Starta function2
Case 3
'osv
'många case blir det :)
End Select

End Function


Svara

Sv: Problem med Callbyname

Postades av 2003-12-12 15:25:06 - Martin Mart

Det är exakt så jag har gjort nu men jag vill ha en enklare lösning...

Därför skulle jag gärna få följande fråga besvarad: Hur funkar klasser och hur gör man detta:

"Testa att lägga metoderna i en klass och skapa en instans av klassen och anropa metoderna"


Svara

Sv: Problem med Callbyname

Postades av 2003-12-12 16:24:19 - Per Hultqvist

"Enda egentliga skälet jag skulle kunna se är om du måste göra 30 stycken helt skilda grejer och måste välja rätt utifrån en siffra man skriver in.
Eller eventuellt om du måste loopa igenom dem, men då känns det ändå som att det borde finnas nåt bra mycket enklare sätt."

Det är inte ofta jag använder CallByName men ett exempel är t ex administrationsprogram som ska uppdatera en databas när man släpper nya versioner. Då skapar jag script som heter t ex 1.sql (skapar hela databasen för version1), 2.sql (uppdaterar från version 1 till version 2), 3.sql (uppdaterar till version 3 och så vidare).

Därefter kör jag en loop :
<code>
For i=currentVersion To LatestVersion
RunScript(i)
CallByName "Update" & i ' pseudo, ej korrekt syntax
Next i
</code>
RunScript(i) kör ett script [i].sql och metoderna Update[i] gör sådant databasunderhåll som är bökigt att fixa med SQL-script och som man hellre gör med kod.

Ett annat exempel är när man skapar väldigt dynamiska kundanpassningar. Då brukar jag lägga ProgID:t samt ev metodnamn i en ini-fil. När man sedan ska göra en kundanpassning så skapar man en ny dll till kunden och skickar ut en ny ini-fil och kör :

Exempel på Ini-fil :
----------
[OriginalFunction]
ProgID=Internal.cConnect
MethodName=Tjoho

[CustomerFunction]
ProgID=Customer.cConnect
MethodName=Tjoho
-------
<code>
Dim mObject As Object
Set mObject=CreateObject(ProgIDFromIniFile)
CallByName mObject,MethodNameFromIniFile,vbMethod
</code>


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

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 570 553
27 958
271 741
2 820
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