Loops 如何通过点击按钮在VFP(FoxPro)中中断while循环?
我正在尝试用两个按钮制作简单的FoxPro应用程序。第一个按钮在循环时启动并正常工作。第二个按钮必须打破这个循环。但我找不到任何正确的解决方案。 有以下循环代码:Loops 如何通过点击按钮在VFP(FoxPro)中中断while循环?,loops,events,visual-foxpro,Loops,Events,Visual Foxpro,我正在尝试用两个按钮制作简单的FoxPro应用程序。第一个按钮在循环时启动并正常工作。第二个按钮必须打破这个循环。但我找不到任何正确的解决方案。 有以下循环代码: DO WHILE !thisForm.cancelpressed IF thisForm.cancelpressed EXIT ENDIF randNum=VAL(TRIM(STR(ROUND( 3*RAND(), 1)))) &&oneVar=VAL("1") IF randNum = VAL("1")
DO WHILE !thisForm.cancelpressed
IF thisForm.cancelpressed
EXIT
ENDIF
randNum=VAL(TRIM(STR(ROUND( 3*RAND(), 1))))
&&oneVar=VAL("1")
IF randNum = VAL("1")
ThisForm.shape1.BackColor = greenColor
ThisForm.shape2.BackColor = orangeColor
ThisForm.shape3.BackColor = redColor
ENDIF
cs = seconds()
IF abs(cs - seconds()) >= 15
doevents
cs = seconds()
ENDIF
IF thisForm.cancelpressed
EXIT
ENDIF
DOEVENTS
WAIT TIMEOUT 1
ENDDO
此代码位于第一个按钮单击方法中。表单对象具有用户定义的“cancelpressed”属性。在第二个按钮单击方法中,我放置了以下内容:
thisForm.cancelpressed = .T.
Thisform.Release()
Clear Events
但它不起作用。当循环开始时,它不想听到任何命令和点击,也不允许关闭程序。如果可以,请提供帮助您可以尝试设置
Application.AutoYield = .T.
依照
但如果这不起作用,那么我认为您会被卡住,因为VFP不是真正的多线程应用程序。您可能可以使用计时器对象解决问题,或者使用多线程解决方法解决问题,但您将完全依靠自己
我不得不说,今天在VFP中启动一个新的应用程序可能不是最好的主意。目前有很多替代方案。问题在于等待窗口。移除它
Local greenColor, orangeColor, redColor
m.greenColor = 0x00FF00
m.orangeColor = 0x3060FF
m.redColor = 0xFF0000
Do While !Thisform.cancelpressed
randNum=Val(Trim(Str(Round( 3*Rand(), 1))))
If m.randNum = Val("1")
Thisform.shape1.BackColor = m.greenColor
Thisform.shape2.BackColor = m.orangeColor
Thisform.shape3.BackColor = m.redColor
Endif
Doevents
Enddo
(我不明白你为什么要进行如此奇怪的randNum设置和检查,也不明白一遍又一遍设置相同颜色的目的,但这不是问题的重点)
通常,您应该更喜欢使用带有如下代码的计时器
顺便说一句,这与VFP或其他语言中的多线程无关。您只需执行一个带有取消标志检查的循环。用同样的方法更新UI,比如用C#来更新UI,不会更容易 我的程序有两个按钮和几个形状。如果我的退出按钮的bind
thisForm.cancelpressed=.T.
到MouseEnter
事件,那么它工作得很好。但它没有点击,它只是停留在我的退出按钮上