楼上的代码里面num应该在click事件外定义,否则每次单击时num的值都会重新定义
在河津等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站建设 网站设计制作按需制作,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销,外贸网站制作,河津网站建设费用合理。
调用 脚本解析引擎,
textbox2.text=Eval(textbox1.text).ToString()
Function Eval(ByVal Expressions As String) As Double
Dim Mssc = CreateObject("MSScriptControl.ScriptControl")
Mssc.Language = "vbscript"
Return CDbl( Mssc.Eval(Expressions))
End Function
不喜欢上面提示的警告的话
textbox2.text=EvalString(textbox1.text)
Function EvalString(ByVal Expressions As String) As String
dim oType = System.Type.GetTypeFromProgID("MSScriptControl.ScriptControl")
Dim o = System.Activator.CreateInstance(oType)
oType.InvokeMember("Language", System.Reflection.BindingFlags.SetProperty , Nothing, o,New Object(){ "vbscript"})
Return oType.InvokeMember("Eval", System.Reflection.BindingFlags.InvokeMethod, Nothing, o, New Object(){Expressions}).ToString()
End Function
Eval 在VB中使用,刚找到的_vb吧_百度贴吧
Private Sub cmdand_Click()
txtlabel.Text = "加"
End Sub
Private Sub Cmdchange_Click()
If txtlabel.Text = "" Then
txtfirst.Text = -1 * Val(txtfirst.Text)
Else
txtsecond.Text = -1 * Val(txtsecond.Text)
End If
End Sub
Private Sub cmddouble_Click()
txtlabel.Text = "乘"
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdhit_Click()
txtlabel.Text = "减"
End Sub
Private Sub cmdmod_Click()
txtlabel.Text = "除"
End Sub
Private Sub cmdresult_Click()
Dim myresult As Double
Select Case txtlabel.Text
Case "加"
myresult = Val(txtfirst.Text) + Val(txtsecond.Text)
Case "减"
myresult = Val(txtfirst.Text - txtsecond.Text)
Case "乘"
myresult = Val(txtfirst.Text * txtsecond.Text)
Case "除"
myresult = Val(txtfirst.Text / txtsecond.Text)
End Select
txtlabel.Text = ""
txtsecond.Text = ""
txtfirst.Text = myresult
txtresult.Text = myresult
End Sub
Private Sub Cmd0_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "0"
Else
txtsecond.Text = txtsecond.Text + "0"
End If
End Sub
Private Sub Cmd1_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "1"
Else
txtsecond.Text = txtsecond.Text + "1"
End If
End Sub
Private Sub Cmdclean_Click()
'txtresult.Text = "0"
'get txtresult.Text = Nothing
txtresult.Text = ""
txtsecond.Text = ""
txtlabel.Text = ""
txtfirst.Text = ""
txtresult.SetFocus
End Sub
Private Sub Cmd2_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "2"
Else
txtsecond.Text = txtsecond.Text + "2"
End If
End Sub
Private Sub Cmd3_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "3"
Else
txtsecond.Text = txtsecond.Text + "3"
End If
End Sub
Private Sub Cmd4_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "4"
Else
txtsecond.Text = txtsecond.Text + "4"
End If
End Sub
Private Sub Cmd5_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "5"
Else
txtsecond.Text = txtsecond.Text + "5"
End If
End Sub
Private Sub Cmd6_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "6"
Else
txtsecond.Text = txtsecond.Text + "6"
End If
End Sub
Private Sub Cmd7_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "7"
Else
txtsecond.Text = txtsecond.Text + "7"
End If
End Sub
Private Sub Cmd8_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "8"
Else
txtsecond.Text = txtsecond.Text + "8"
End If
End Sub
Private Sub Cmd9_Click()
If txtlabel.Text = "" Then
txtfirst.Text = txtfirst.Text + "9"
Else
txtsecond.Text = txtsecond.Text + "9"
End If
End Sub
Private Sub Form_Load()
txtfirst.Text = ""
txtlabel.Text = ""
txtsecond.Text = ""
End Sub
Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Private Sub m2_Click()
frmAbout.Show 1
End Sub
Private Sub txtfirst_Change()
txtresult.Text = txtfirst.Text
End Sub
Private Sub txtsecond_Change()
txtresult.Text = txtsecond.Text
End Sub
这个VB 6.0 的,你自己改下。。。
在textbox中的是字符串,所以,你需要对字符串进行处理。
首先获取到字符串的数字,存储在两个变量中然后取得操作符,通过select case或if elif进行判断,从而在textbox2中显示。
例1:以下程序我们申请几个指向不同类型的指针:
’使用StructLayout(LayoutKind.Sequential)属性告诉net编译器:结构的元素在内存中按其出现的顺序排列
StructLayout(LayoutKind.Sequential) _
Public Structure DEFUDT_Test
Public bytb As Byte
Public i32a As Int32
End Structure
Public Function fnGetIntptr1() As IntPtr
’取得一个4字节数组指针
Dim tabytTest(3) As Byte
’以下语句告诉net垃圾回收进程不对tabytTest进行处理,也就是说tabytTest占用的内存区域固定不变。
Dim thObject As GCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)
Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() ’取得指向字节数组的指针
’取得一个指向32位内存数据的指针,
’由于使用gchandle取指针的方法只能对引用的对象有效,
’所以对如int32等值类型必须使用将其封装成为一个对象的方法以变为引用类型
Dim ti32Test As Object = Convert.ToInt32(0)
’以下语句告诉net垃圾回收进程不对ti32test进行处理,也就是说ti32Test的内存位置固定不变。
Dim thObject1 As GCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)
Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() ’取得ti32Test的首地址
Dim tudtTest1 As DEFUDT_Test
’由于结构是一种值类型变量,为保证指针申请方便,我们申请
’取得一个和结构tudtTest1大小一致的字节数组指针,只要空间占用长度和结构一样就可以了
’由于net在结构封装中会插入额外的数据位,所以一定要用sizeof方法得到结构在非托管使用时的实际大小
Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte
Dim thObject2 As GCHandle = GCHandle.Alloc(tudtTest, GCHandleType.Pinned)
Dim tpObject2 As IntPtr = thObject2.AddrOfPinnedObject() ’取得指向结构的指针
’在这儿你可以写对指针处理的任意代码(在例2中会给予补充)……
’在使用完毕后一定要释放指针指向的内存块,让垃圾回收器可对这个内存块回收处理
If thObject.IsAllocated Then
thObject.Free()
End If
If thObject1.IsAllocated Then
thObject1.Free()
End If
If thObject2.IsAllocated Then
thObject2.Free()
End If
End Function
上例中指针流程处理可以归纳为:
1、 定义一个具有合适内存长度的引用变量(关于引用变量和值变量的差异可以参观VB.NET的书籍)
2、使用GCHandle.Alloc方法将变量的内存区域固定下来。
3、使用GCHandle对象的AddrOfPinnedObject取得该内存区域的首地址并赋值给指针变量.
4、对指针进行操作
5、使用GCHandle对象的free方法释放指针指向的内存区域以便net垃圾回收器可以回收这个内存空间
2、指针所指向数据的存取
在.net中,对指针指向数据的存储函数都封装在marshal类中,主要的函数包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指针所表示的地址中写入XXX类型的数据,而ReadXXX中作用就是将指针所在地址的数据以XXX类型方式读出。看例程2,我们使用这些方法演示对例1那几个指向不同类型数据的指针作数据存/取操作。
例2:演示向例1申请得到的几个指针执行写入及读取数据的操作.
Marshal.WriteInt32(tpObject1, 0, Convert.ToInt32(77)) ’向ti32Test变量指向的地址写入32位整数77
MsgBox("现在ti32Test的值为:" ti32Test) ’因为变量存储地址的数据已改为77,所以显示为77
’以下这句之所以可行,因为ti32Test是32位整数,而tpObject指向的tabytTest数组刚好有4个元素
’而每一个byte元素都占用8位,合起来就是32位,和ti32Test占用的空间一样。这就印证了前面提’
’到的net中指针没有指向类型的说明。
Marshal.WriteInt32(tpObject, 0, ti32Test)
’以下代码再将tabytTest字节数组的内容理解为一个int32整数,
’并将值赋值给tudtTest结构中的int32元素
’我们使用Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32以取得i32a元素在结构中的内存偏移位置
’所以New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32)就临时产生了
’一个指针并指向i32a所在的内存地址(, 这个方法也说明了指针可以以字节为单位进行加减计算以指向合适的变量。
’Marshal.ReadInt32的作用是从指针中读取一个32整数。
Marshal.WriteInt32(New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32), _
0, Marshal.ReadInt32(tpObject))
’这儿可以将字节数组的内容复制到真正的结构中
MsgBox(Marshal.OffsetOf(tudtTest1.GetType, "i32a").ToInt32)
tudtTest1 = CType(Marshal.PtrToStructure(tpObject2, GetType(DEFUDT_Test)), DEFUDT_Test)
MsgBox("结构tidtTest1中i32a元素的值为:" tudtTest1.i32a) ’此处将显示刚赋的值77
你是要把连续多个空格,变换成只需要一个空格,那么:
do while Instr(tStr," ")0
tStr = Replace(tStr, " ", " ") '用一个空格,替换2个空格
loop
当前文章:vb.net加减除,vb中加减乘除的代码
标题链接:https://www.cdcxhl.com/article2/dsihjic.html
成都网站建设公司_创新互联,为您提供移动网站建设、定制开发、App设计、App开发、虚拟主机、网站导航
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联