Jag vill exekvera innehållet i en sträng som vb-kod. T,ex är innehållet i en sträng följande: Hej, Funkar inte med CallByName, object är ett formulär och formuläret innehåller en meny jag måste veta om den är Visible eller inte och menynamnet får jag som en sträng, det blir en "nivå" för mycket... Du får väl göra lite egen kod... Det tuffaste sättet att exekvera kod dynamiskt är genom att använda Microsoft Script Control (måste läggas till som en komponent i projektet). Visst finns det vägar runt detta (som t ex de metoder som föreslagits ovan) men enligt min erfarenehet är det mycket sällan nödvändigt att exekvera kod på detta sätt. Det brukar gå att lösa typesäkert och utan dynamisk kod. Visst finns det undantag, men jag kan inte med den information som finns i tråden se att det skulle vara nödvändigt. Ett vanligt undantag är när användarna av ditt program skall kunna skriva egen scriptkod som utökar funktionaliteten i ditt program. Då är MS Script control, VBA, SAX basic m fl bra att ha.VB6: Exekvera kod i en sträng
"frmABC.cmdButton1.Visible" Jag vill alltså exekvera koden som står i strängen typ: If (innehållet i strängen) = False then osv....Sv: VB6: Exekvera kod i en sträng
Jag är inte helt säker på att jag är med på vad du behöver, men jag rekommendera att du kollar på CallByName i hjälpen (MSDN), denna funktion kanske kan lösa dina problem.
Lycka till!
// JohanSv:VB6: Exekvera kod i en sträng
TSv: VB6: Exekvera kod i en sträng
Dvs. dela upp strängen i delsträngar. Ta första biten. Testa callbyname på den. Ta nästa, ta första som parameter etc. etc.
(Dvs. dela på varje punkt)Sv:VB6: Exekvera kod i en sträng
Testa detta:
Skapa ett nytt projekt. Lägg till komponenten Microsoft Script Control. Lägg en CommandButton och en ScriptControl på Form1.
Skapa en ny klass och ge den namnet SharedClass.
Skriv följande kod i SharedClass:
<CODE>
Public Property Get Form() As Object
Set Form = Form1
End Property
</CODE>
Skriv följande kod i Form1:
<CODE>
Private Sub Form_Load()
Dim sh As SharedClass
Set sh = New SharedClass
ScriptControl1.AddObject "sh", sh, True
MsgBox ScriptControl1.Eval("sh.Form.Command1.Name")
End Sub
</CODE>
Voila! Dynamisk kod som samverkar med din applikation!
Lycka till!
/PelleSv: VB6: Exekvera kod i en sträng
Om du nu har flera formulär så lägg dem i en collection eller liknande, och använd strängen "frmABC" som nyckel. Med denna nyckel får du sedan fram rätt formulärobjekt. Om sedan varje formulär har en menykontroll så kan du ju döpa denna till samma namn på alla formulär (eller använda ett Interface som varje formulär implementerar, där en metod returnerar menykontrollen). Alltså någonting i stil med :
<code>
Dim mForm as IFormInterface
Set mForm=mFormsCollection.Item("frmABC")
if mForm.GetMenuControl.Items("mnuFileSave").Visible=true Then
...
End If
</code>
I ovanstående exempel har interfacet IFormInterface en funktion eller property som heter GetMenuControl som returnerar menykontrollen. Detta sätt är både prestandamässigt bättre och dessutom betydligt mer "typesafe".
Jag kanske missförstått något men som sagt, min erfarenhet är att det nästan alltid finns bättre lösningar än att exekvera dynamisk kod.