vb 如何把label的caption的字符串变为表达式计算

比如:label1.caption=((4*6)+(4/8))+(5/7)
要计算表达式((4*6)+(4/8))+(5/7)的值,该怎么写代码呢?
麻烦答案写的详细一点!
真的急需啊!

第1个回答  2012-01-19
我看了你的追问,替他们回答。
我觉得,像你举的例子,text1.text="((4*6)+(4/8))+(5/7)“,那text2.text=CStr(((4*6)+(4/8))+(5/7))
要想把字符串转换成表达式,可以用ScriptControl(C:\windows\system32\msscript.ocx)。
Label1.Caption=ScriptControl1.Eval("((4*6)+(4/8))+(5/7)“)
结果 25.2142857142857
或:Label1.Caption="((4*6)+(4/8))+(5/7)“ '若label1.caption已提前赋值,该行可省
Label1.Caption=ScriptControl1.Eval(Label1.Caption)追问

ScriptControl我知道一点,但是不知道该怎么用
能不能把ScriptControl用法说的详细一点啊?我没有财富值给人家额,但是真的很需要这个答案!
麻烦写的详细点啊!非常感激啊!

追答

这个嘛我其实也不太熟悉,它的方法是我自己琢磨的,不一定准啊。
方法:
*ExecuteStatement(Statement As String)
执行一句或多句Script代码,语言由Language决定。Statement为代码内容,多行用换行符分隔。也可以执行一些方法,但它们要存在于控件内。
*AddCode(Code As String)
将Code中指定的代码存入控件,并执行。Code输入规则如同Statement
Reset()
清除控件内所有的代码和对象,回到初始状态。
*Run(ProcedureName As String, ParamArray Parameters() As Variant)
执行一个过程,该过程要在控件内;ProcedureName为过程名,Parameters() 为参数
*Eval(Expression As String)
返回一个表达式的值,Expression为内容。也可以用来返回一个变量或函数的返回值,但它要在控件内。
AddObject(Name As String, Object As Object, [AddMembers As Boolean = False])
添加一个对象到控件,Name为名称,Object为实际对象,不可为Nothing。添加完后,就可以用ExecuteStatement、AddCode和Eval操控它了。
属性:
Language
设置ExecuteStatement、AddCode和Eval使用的语言,取值为:"JavaScript"、"JScript"、"VBScript"
AllowUI
决定是否允许显示对话框
Timeout
指定ExecuteStatement、AddCode和Eval执行的用时的最大值,以毫秒为单位。若超出该值,当AllowUI为True时弹出对话框,选择是否继续,若不继续则发生Timeout事件;为False时直接中断,并发生Timeout事件。有时也会发生Error事件。若这两个事件都不存在,则发生错误。也可以设置为-1,则不限制时间。
对象:
Modules
模块集合,内部方法和上面所讲的方法作用一样。
所有前面带*的都是模块中的内部方法及属性,它们只作用于该模块。
可以用Add方法添加新模块,语法:
Add(Name As String, [Object])
其中Name指名称
*Procedures
过程集合,里面有所有在该模块里的过程。
事件:
Error()
当在该控件发生错误时发生。
Timeout()
当语句因超时而中断执行时发生。

追问

真的很感谢你哈!!

追答

提示你:在模块外也有ExecuteStatement、AddCode、Run、Eval这些方法,它们作用于Global模块(公共模块)。该模块也许在Modules里找不到。

第2个回答  2012-01-20
看了上面的回答,这样就可以了
Function CalcStr(StrNum As String) As Double
Set MSSC = CreateObject("MSScriptControl.ScriptControl")
MSSC.Language = "VBScript"
CalcStr = MSSC.Eval(StrNum)
End Function

Private Sub command1_click()
Label1.Caption = CalcStr(Text1.Text) ’或 Text2.text= CalcStr(Text1.Text)
End Sub追问

要不要在工程-部件把microsoft Script Control 1.0 前面打勾?
这样子是不是四则混合运算都能进行了?

追答

是的,不打钩好像也能出来

追问

真的很感谢你哈!!

本回答被提问者和网友采纳
第3个回答  2012-01-30
label1.caption 类型属于字符类型。
label1.caption不能转换为表达式,只能间接赋值给label1.caption.
即通过其他控件的事件来完成赋值.
第4个回答  2012-01-30
添加部件:microsoft Script Control 1.0
也就是进行混合运算呀.

Private Sub Command1_Click()
Dim str As String
str = Text2
ScriptControl1.Reset
ScriptControl1.AddObject "TEXT1", Text1, True
ScriptControl1.AddCode "text1.text=" & str
End Sub
第5个回答  2012-01-19
你没说明白,是要计算之后的值呢?还是计算公式本身表示到Lable1中?
计算的值的话,现在你写的就可以.显示公式的话:
Label1.Caption = "((" & 4 & "*" & 6 & ") + (" & 4 & "/" & 8 & ")) + (" & 5 & "/" & "7" & ")"追问

不是的,我没说清楚。
比如一个text控件,在text1中输入((4*6)+(4/8))+(5/7)
然后在text2中显示表达式((4*6)+(4/8))+(5/7)的计算结果
换句话说,我想问,如何把字符串转换成表达式进行计算

追答

不知道你知道VBA不,可以将你的算法通过VBA嫁接到Excell里面。将输入公式字符串交给Excel对象。对象执行公式字符串就得出结果了。http://wenku.baidu.com/view/627a29323968011ca3009149.html

追问

真的很感谢你哈!!

追答

对你有帮助就行! 互相学习.

相似回答