我设计了一个vb程序,现在遇到了两个问题不能解决,希望各位高手可以帮忙解决。
我设计的程序主要功能如下,接收一个箱子四个角上的受力数据,然后通过这四个数据计算该箱的总重量和重心位置,如果其中某一项超过允许范围就会弹出一个对话框报错。我现在遇到的问题主要有以下2个:
1.我设计的这个程序在设置参数时需要输入密码,我因此设计了一个密码输入界面(在文本框中输入密码,输入好之后按下确定按钮即可)。我现在的问题是:如果使用时连续三次输入错误密码我希望程序总界面(form1)自动关闭。不知道这个功能该如何实现。
2.因为我的这个程序需要计算重心,我编了如下代码:
Private Sub Command4_Click()
'测绘重心
Dim a As Single
Dim b As Single
Dim c As Single
Dim d As Single
Dim e As Single
Dim G As Single
Dim X As Single
Dim Y As Single
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
d = Val(Text4.Text)
e = Text5.Text
G = (a + b + c + d) / 9.8 - e
X = (4000 * a + 4000 * b + 10400 * c + 10400 * d) / (a + b + c + d)
Y = (3600 * a + 6000 * b + 3600 * c + 6000 * d) / (a + b + c + d)
该代码的功能即每按下一次该按钮后,根据得到数据测算重心一次。
我现在想把它改成按下该按钮后,每得到一组新的数据(即a,b,c,d的值更新一次)系统就自动测算中心一次,直到我再次按下该按钮停止。不知道应该在现在这个代码的基础上怎样修改。
上面三个问题不一定要全部解答出来,每解决其中一个问题我都会给您一定的分数,希望高手您能指点迷经~~我在此表示非常感谢~~
补充:整个测算监控重心和总重的完整代码如下:
Dim a As Single
Dim b As Single
Dim c As Single
Dim d As Single
Dim e As Single
Dim X As Single
Dim Y As Single
Dim G As Single
Dim F As Single
Shape4.Visible = False '开始计算前将实际重心点设为隐藏
a = Val(Text1.Text) + 0.0000000001
b = Val(Text2.Text) + 0.0000000001
c = Val(Text3.Text) + 0.0000000001
d = Val(Text4.Text) + 0.0000000001
e = Text5.Text
G = (a + b + c + d) / 9.8 - e
X = (4000 * a + 4000 * b + 10400 * c + 10400 * d) / (a + b + c + d)
Y = (3600 * a + 6000 * b + 3600 * c + 6000 * d) / (a + b + c + d)
Shape4.Left = X - 50
Shape4.Top = Y - 50
Shape4.Visible = True '显示隐藏的实际重心点
'测绘理论重心到实际重心的距离
d1 = Sqr((7150 - (X - 50)) ^ 2 + (4750 - (Y - 50)) ^ 2)
'报警
'1重心偏移报警
If d1 > 500 Then
Form2.Visible = True ’弹出报错对话框
End If
'2超重报警
If a > 70 Or b > 70 Or c > 70 Or d > 70 Or G > 20 Then
Form2.Visible = True
End If
追问:谢谢~,但是现在有个问题就是:四个数据虽然是一次性发送的,但是四个文本框不可能是完全同步接收到数据,也不能确定谁先收到谁后收到。你现在的程序是只要有其中一个文本框有数据改变就开始计算,这样在四个文本框都收到新的数据之前,程序已经开始通过公式计算重心。不知道是不是能改一下改成4个文本框里的数据都发生了一次改变后才开始计算和检测。 报错部分代码见问题补充。
答案:需要定义一个变量ComputYN,用于判断当a、b、c、d 改变时是否需要计算。
这里又定义了两个文本框:TextX、TextY,用于存放你计算出来的x、y,也可根据自己的需要做其它处理。
程序启动时进入密码校验程序,这里的密码为“123”,可根据需要设置
Private ComputYN As Boolean
Private Sub Form_Load()
ComputYN = False
Command4.Caption = "Command4"
Dim Mima As String, mima1 As String
Dim Nci As Integer
Mima = "123"
Nci = 0
While Nci < 3
mima1 = InputBox("请输入密码(第" & Nci + 1 & "次):", "输入密码", "")
mima1 = Trim(mima1)
If Mima = mima1 Then GoTo 10
Nci = Nci + 1
If Nci = 3 And Mima <> mima1 Then
'Form1.Hide
End
End If
Wend
10 '
End Sub
Private Sub Command4_Click()
If ComputYN = False Then
Comput1
ComputYN = True
Command4.Caption = "计算"
Else
ComputYN = False
Command4.Caption = "Command4"
End If
End Sub
Private Sub Comput1()
'测绘重心
Dim a As Single
Dim b As Single
Dim c As Single
Dim d As Single
Dim e As Single
Dim G As Single
Dim X As Single
Dim Y As Single
a = Val(Text1.Text) + 0.0000000001
b = Val(Text2.Text) + 0.0000000001
c = Val(Text3.Text) + 0.0000000001
d = Val(Text4.Text) + 0.0000000001
e = Val(Text5.Text) + 0.0000000001
G = (a + b + c + d) / 9.8 - e
X = (4000 * a + 4000 * b + 10400 * c + 10400 * d) / (a + b + c + d)
Y = (3600 * a + 6000 * b + 3600 * c + 6000 * d) / (a + b + c + d)
TextX.Text = X
TextY.Text = Y
End Sub
Private Sub Text1_Change()
If ComputYN = True Then Comput1
End Sub
Private Sub Text2_Change()
If ComputYN = True Then Comput1
End Sub
Private Sub Text3_Change()
If ComputYN = True Then Comput1
End Sub
Private Sub Text4_Change()
If ComputYN = True Then Comput1
End Sub
Private Sub Text5_Change()
If ComputYN = True Then Comput1
End Sub
其他:1.
if 密码错误次数=3 then end
2.
你的这个想法不错,但是编程比较复杂,要设置一个全局变量作为开关, 计算过程作为一个单独的子程序,当文本框的change事件发生,就调用一次。
上一个:VB问题,如何判断有没有画过图?
下一个:vb中的函数是找什么来使用函数的 他们具体是怎么个形式来做的