sign in | join about | help | sitemap
Connecting Tech Pros Worldwide
Maurice's Avatar

Eval function vb.net


Question posted by: Maurice (Guest) on February 20th, 2006 03:05 PM
Hi,

is it possible to enter a string in code in VB.NET 2005 which will be
executed as a codeline during runtime?

i.e. I want to declare a new form depending on the string:
"Dim frm as new frmTest"


Thanx

12 Answers Posted
Armin Zingler's Avatar
Guest - n/a Posts
#2: Re: Eval function vb.net

"Maurice" <hmoviat@nospam.nospam> schrieb[color=blue]
> Hi,
>
> is it possible to enter a string in code in VB.NET 2005 which will
> be executed as a codeline during runtime?
>
> i.e. I want to declare a new form depending on the string:
> "Dim frm as new frmTest"[/color]


This line is to be part of which method, class, namespace, assembly?
Maybe the answers to the 2 questions above help.

Or: (Framework 1.1)
http://msdn.microsoft.com/library/d...cassemblies.asp


Armin

Maurice's Avatar
Guest - n/a Posts
#3: Re: Eval function vb.net

"Armin Zingler" <az.nospam@freenet.de> wrote in
news:uDJYz8iNGHA.3856@TK2MSFTNGP12.phx.gbl:
[color=blue]
> http://msdn.microsoft.com/library/d...ry/en-us/cpguid
> e/html/cpconemittingdynamicassemblies.asp[/color]

Hi Armin,

I have 2 different forms inside my project:
frmTest
frmCompany

I can declare a new form by using the code:
dim frm as new frmTest
OR
dim frm as new frmCompany

What I want is that when I have a string with the form name (strFormName) I
can use this string to declare the new form.

strEval = "Dim frm as new " & strFormName

Something like this. So the string above (strEval) will be executed as a
line of code.






Armin Zingler's Avatar
Guest - n/a Posts
#4: Re: Eval function vb.net

"Maurice" <hmoviat@nospam.nospam> schrieb[color=blue]
> Hi Armin,
>
> I have 2 different forms inside my project:
> frmTest
> frmCompany
>
> I can declare a new form by using the code:
> dim frm as new frmTest
> OR
> dim frm as new frmCompany
>
> What I want is that when I have a string with the form name
> (strFormName) I can use this string to declare the new form.
>
> strEval = "Dim frm as new " & strFormName
>
> Something like this. So the string above (strEval) will be executed
> as a line of code.[/color]


Creating an object by class name has been asked three times in a row, that's
why I pointed to the previous two questions and answers.

Why do you have the class name in a string? Often this is not necessary:

Dim frm as form

select case value
case This
frm = new frmTest
case That
frm = new frmCompany
end select

frm.show


Armin

Maurice's Avatar
Guest - n/a Posts
#5: Re: Eval function vb.net

"Armin Zingler" <az.nospam@freenet.de> wrote in news:OrGv#YjNGHA.428
@tk2msftngp13.phx.gbl:
[color=blue]
> Creating an object by class name[/color]

Hi Armin,

sorry, indeed creating an object by class name.

It's possible that in future some names may change and I don;t want to
change this function then. That's why I don't want a select case statement
to declare a new form.

But isn't there something like the Eval function in VBScript that you can
use?

i.e.:
Dim intA as integer, intB as integer, intC as integer

intA = 5
intB = 10
Eval("intC = intA * intB")

The string value "intC = intA * intB" would then be executed as code and
intC would have the value 50.



CMM's Avatar
Guest - n/a Posts
#6: Re: Eval function vb.net

Look into Activator.CreateInstance(). This has been asked before. Do a
search for more detailed examples.


--
-C. Moya
www.cmoya.com
"Maurice" <hmoviat@nospam.nospam> wrote in message
news:Xns9770A5BB9E1ACmauricemertens@194.109.133.24 2...[color=blue]
> "Armin Zingler" <az.nospam@freenet.de> wrote in
> news:uDJYz8iNGHA.3856@TK2MSFTNGP12.phx.gbl:
>[color=green]
>> http://msdn.microsoft.com/library/d...ry/en-us/cpguid
>> e/html/cpconemittingdynamicassemblies.asp[/color]
>
> Hi Armin,
>
> I have 2 different forms inside my project:
> frmTest
> frmCompany
>
> I can declare a new form by using the code:
> dim frm as new frmTest
> OR
> dim frm as new frmCompany
>
> What I want is that when I have a string with the form name (strFormName)
> I
> can use this string to declare the new form.
>
> strEval = "Dim frm as new " & strFormName
>
> Something like this. So the string above (strEval) will be executed as a
> line of code.
>
>
>
>
>
>[/color]


Herfried K. Wagner [MVP]'s Avatar
Herfried K. Wagner [MVP] February 20th, 2006 08:45 PM
Guest - n/a Posts
#7: Re: Eval function vb.net

"Maurice" <hmoviat@nospam.nospam> schrieb:[color=blue]
> is it possible to enter a string in code in VB.NET 2005 which will be
> executed as a codeline during runtime?
>
> i.e. I want to declare a new form depending on the string:
> "Dim frm as new frmTest"[/color]

Build a Custom .NET "EVAL" Provider
<URL:http://www.eggheadcafe.com/articles/20030908.asp>

Runtime Compilation (A .NET eval statement)
<URL:http://www.codeproject.com/dotnet/evaluator.asp>

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Charles Law's Avatar
Guest - n/a Posts
#8: Re: Eval function vb.net

Hi Maurice

Here is something I use

<code>
Public NotInheritable Class Evaluator

Private Shared WithEvents m_ScriptControl As
MSScriptControl.ScriptControlClass

Shared Sub New()

m_ScriptControl = New MSScriptControl.ScriptControlClass

m_ScriptControl.Language = "VBScript"
m_ScriptControl.AllowUI = False

End Sub

Public Shared Function Evaluate(ByVal s As String, ByVal decimalPlaces
As Integer) As Double

Return Decimal.Round(Convert.ToDecimal(Evaluate(s)), decimalPlaces)

End Function

Public Shared Function Evaluate(ByVal s As String) As Double

Dim r As Double

m_ScriptControl.Reset()

' Example of executing code
''m_ScriptControl.ExecuteStatement("Dim m")
''m_ScriptControl.ExecuteStatement("m = 5")

' Example of manipulating a form
''m_ScriptControl.AddObject("DotnetForm", Me)
''m_ScriptControl.ExecuteStatement("dotnetform.width =
dotnetform.width + 10")

Try
r = CDbl(m_ScriptControl.Eval(s))

Catch ex As Exception
Dim ee As EvaluationException

ee = New EvaluationException(ex.Message)

ee.Description = m_ScriptControl.Error.Description
ee.Column = m_ScriptControl.Error.Column
ee.Number = m_ScriptControl.Error.Number
ee.Source = m_ScriptControl.Error.Source
ee.Text = m_ScriptControl.Error.Text

Throw ee

End Try

Return r

End Function

End Class
</code>

I call Evaluator.Evaluate(...) with a string that I want to evaluate,
optionally with a number of decimal places. EvaluationException is my custom
exception class, but you could make up your own.

HTH

Charles


"Maurice" <hmoviat@nospam.nospam> wrote in message
news:Xns9770B2725FE78mauricemertens@194.109.133.24 2...[color=blue]
> "Armin Zingler" <az.nospam@freenet.de> wrote in news:OrGv#YjNGHA.428
> @tk2msftngp13.phx.gbl:
>[color=green]
>> Creating an object by class name[/color]
>
> Hi Armin,
>
> sorry, indeed creating an object by class name.
>
> It's possible that in future some names may change and I don;t want to
> change this function then. That's why I don't want a select case statement
> to declare a new form.
>
> But isn't there something like the Eval function in VBScript that you can
> use?
>
> i.e.:
> Dim intA as integer, intB as integer, intC as integer
>
> intA = 5
> intB = 10
> Eval("intC = intA * intB")
>
> The string value "intC = intA * intB" would then be executed as code and
> intC would have the value 50.
>
>
>[/color]


Cor Ligthert [MVP]'s Avatar
Cor Ligthert [MVP] February 22nd, 2006 10:25 AM
Guest - n/a Posts
#9: Re: Eval function vb.net

Charles,

Do you mind if I test your class and than set it on our (VB-Tips) website,
this was in my opinion as well the way to go and I was intended to try it
some day.

(With telling who it made of course)

Cor

"Charles Law" <blank@nowhere.com> schreef in bericht
news:%23mviJK5NGHA.3196@TK2MSFTNGP09.phx.gbl...[color=blue]
> Hi Maurice
>
> Here is something I use
>
> <code>
> Public NotInheritable Class Evaluator
>
> Private Shared WithEvents m_ScriptControl As
> MSScriptControl.ScriptControlClass
>
> Shared Sub New()
>
> m_ScriptControl = New MSScriptControl.ScriptControlClass
>
> m_ScriptControl.Language = "VBScript"
> m_ScriptControl.AllowUI = False
>
> End Sub
>
> Public Shared Function Evaluate(ByVal s As String, ByVal decimalPlaces
> As Integer) As Double
>
> Return Decimal.Round(Convert.ToDecimal(Evaluate(s)), decimalPlaces)
>
> End Function
>
> Public Shared Function Evaluate(ByVal s As String) As Double
>
> Dim r As Double
>
> m_ScriptControl.Reset()
>
> ' Example of executing code
> ''m_ScriptControl.ExecuteStatement("Dim m")
> ''m_ScriptControl.ExecuteStatement("m = 5")
>
> ' Example of manipulating a form
> ''m_ScriptControl.AddObject("DotnetForm", Me)
> ''m_ScriptControl.ExecuteStatement("dotnetform.width =
> dotnetform.width + 10")
>
> Try
> r = CDbl(m_ScriptControl.Eval(s))
>
> Catch ex As Exception
> Dim ee As EvaluationException
>
> ee = New EvaluationException(ex.Message)
>
> ee.Description = m_ScriptControl.Error.Description
> ee.Column = m_ScriptControl.Error.Column
> ee.Number = m_ScriptControl.Error.Number
> ee.Source = m_ScriptControl.Error.Source
> ee.Text = m_ScriptControl.Error.Text
>
> Throw ee
>
> End Try
>
> Return r
>
> End Function
>
> End Class
> </code>
>
> I call Evaluator.Evaluate(...) with a string that I want to evaluate,
> optionally with a number of decimal places. EvaluationException is my
> custom exception class, but you could make up your own.
>
> HTH
>
> Charles
>
>
> "Maurice" <hmoviat@nospam.nospam> wrote in message
> news:Xns9770B2725FE78mauricemertens@194.109.133.24 2...[color=green]
>> "Armin Zingler" <az.nospam@freenet.de> wrote in news:OrGv#YjNGHA.428
>> @tk2msftngp13.phx.gbl:
>>[color=darkred]
>>> Creating an object by class name[/color]
>>
>> Hi Armin,
>>
>> sorry, indeed creating an object by class name.
>>
>> It's possible that in future some names may change and I don;t want to
>> change this function then. That's why I don't want a select case
>> statement
>> to declare a new form.
>>
>> But isn't there something like the Eval function in VBScript that you can
>> use?
>>
>> i.e.:
>> Dim intA as integer, intB as integer, intC as integer
>>
>> intA = 5
>> intB = 10
>> Eval("intC = intA * intB")
>>
>> The string value "intC = intA * intB" would then be executed as code and
>> intC would have the value 50.
>>
>>
>>[/color]
>
>[/color]


Charles Law's Avatar
Guest - n/a Posts
#10: Re: Eval function vb.net

Hi Cor

Please feel free. I'd be honoured :-)

Charles


"Cor Ligthert [MVP]" <notmyfirstname@planet.nl> wrote in message
news:uiIv2k5NGHA.3732@TK2MSFTNGP10.phx.gbl...[color=blue]
> Charles,
>
> Do you mind if I test your class and than set it on our (VB-Tips) website,
> this was in my opinion as well the way to go and I was intended to try it
> some day.
>
> (With telling who it made of course)
>
> Cor
>
> "Charles Law" <blank@nowhere.com> schreef in bericht
> news:%23mviJK5NGHA.3196@TK2MSFTNGP09.phx.gbl...[color=green]
>> Hi Maurice
>>
>> Here is something I use
>>
>> <code>
>> Public NotInheritable Class Evaluator
>>
>> Private Shared WithEvents m_ScriptControl As
>> MSScriptControl.ScriptControlClass
>>
>> Shared Sub New()
>>
>> m_ScriptControl = New MSScriptControl.ScriptControlClass
>>
>> m_ScriptControl.Language = "VBScript"
>> m_ScriptControl.AllowUI = False
>>
>> End Sub
>>
>> Public Shared Function Evaluate(ByVal s As String, ByVal decimalPlaces
>> As Integer) As Double
>>
>> Return Decimal.Round(Convert.ToDecimal(Evaluate(s)),
>> decimalPlaces)
>>
>> End Function
>>
>> Public Shared Function Evaluate(ByVal s As String) As Double
>>
>> Dim r As Double
>>
>> m_ScriptControl.Reset()
>>
>> ' Example of executing code
>> ''m_ScriptControl.ExecuteStatement("Dim m")
>> ''m_ScriptControl.ExecuteStatement("m = 5")
>>
>> ' Example of manipulating a form
>> ''m_ScriptControl.AddObject("DotnetForm", Me)
>> ''m_ScriptControl.ExecuteStatement("dotnetform.width =
>> dotnetform.width + 10")
>>
>> Try
>> r = CDbl(m_ScriptControl.Eval(s))
>>
>> Catch ex As Exception
>> Dim ee As EvaluationException
>>
>> ee = New EvaluationException(ex.Message)
>>
>> ee.Description = m_ScriptControl.Error.Description
>> ee.Column = m_ScriptControl.Error.Column
>> ee.Number = m_ScriptControl.Error.Number
>> ee.Source = m_ScriptControl.Error.Source
>> ee.Text = m_ScriptControl.Error.Text
>>
>> Throw ee
>>
>> End Try
>>
>> Return r
>>
>> End Function
>>
>> End Class
>> </code>
>>
>> I call Evaluator.Evaluate(...) with a string that I want to evaluate,
>> optionally with a number of decimal places. EvaluationException is my
>> custom exception class, but you could make up your own.
>>
>> HTH
>>
>> Charles
>>
>>
>> "Maurice" <hmoviat@nospam.nospam> wrote in message
>> news:Xns9770B2725FE78mauricemertens@194.109.133.24 2...[color=darkred]
>>> "Armin Zingler" <az.nospam@freenet.de> wrote in news:OrGv#YjNGHA.428
>>> @tk2msftngp13.phx.gbl:
>>>
>>>> Creating an object by class name
>>>
>>> Hi Armin,
>>>
>>> sorry, indeed creating an object by class name.
>>>
>>> It's possible that in future some names may change and I don;t want to
>>> change this function then. That's why I don't want a select case
>>> statement
>>> to declare a new form.
>>>
>>> But isn't there something like the Eval function in VBScript that you
>>> can
>>> use?
>>>
>>> i.e.:
>>> Dim intA as integer, intB as integer, intC as integer
>>>
>>> intA = 5
>>> intB = 10
>>> Eval("intC = intA * intB")
>>>
>>> The string value "intC = intA * intB" would then be executed as code and
>>> intC would have the value 50.
>>>
>>>
>>>[/color]
>>
>>[/color]
>
>[/color]


Cor Ligthert [MVP]'s Avatar
Cor Ligthert [MVP] February 22nd, 2006 02:55 PM
Guest - n/a Posts
#11: Re: Eval function vb.net

Charles,

I made it a little bit more simple as sample. Do you agree with this?

http://www.vb-tips.com/default.aspx...d1-2b03e1a439ae


Cor


Charles Law's Avatar
Guest - n/a Posts
#12: Re: Eval function vb.net

Hi Cor

Yes, indeed. It is neat enough to demonstrate the idea, and people can add
frills as they wish.

Charles


"Cor Ligthert [MVP]" <notmyfirstname@planet.nl> wrote in message
news:ua$Ue27NGHA.3284@TK2MSFTNGP14.phx.gbl...[color=blue]
> Charles,
>
> I made it a little bit more simple as sample. Do you agree with this?
>
> http://www.vb-tips.com/default.aspx...d1-2b03e1a439ae
>
>
> Cor
>[/color]


Maurice's Avatar
Guest - n/a Posts
#13: Re: Eval function vb.net

"Cor Ligthert [MVP]" <notmyfirstname@planet.nl> wrote in
news:ua$Ue27NGHA.3284@TK2MSFTNGP14.phx.gbl:
[color=blue]
> Charles,
>
> I made it a little bit more simple as sample. Do you agree with this?
>
> http://www.vb-tips.com/default.aspx...7-86d1-2b03e1a4
> 39ae
>
>
> Cor
>
>[/color]

Hi Charles, Cor,

thanks for the good support!

I will try this one out.


Maurice
 
Not the answer you were looking for? Post your question . . .
196,932 members ready to help you find a solution.
Join Bytes.com

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 196,932 network members.
Post your question now . . .
It's fast and it's free

Popular Articles

Top Community Contributors