当前位置:编程学习 > VB >>

我设计了一个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中的函数是找什么来使用函数的 他们具体是怎么个形式来做的

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,