我正在努力实现以下目标
我尝试使用计时器功能,但是间隔设置似乎只是按时间间隔按其状态工作。
我不想使用Start-Sleep(开始睡眠)选项,因为我需要在出现此提示时使表单保持活动状态。
$timerPrompt = New-Object System.Windows.Forms.Timer
$timerPrompt.Interval = 3000
$timerPrompt.Add_Tick({$form.Controls.Remove($label1)})
答案 0 :(得分:0)
我对GUI编程不是很好,但是我有一个技巧可以解决这个问题,因为我已经使用了许多GUI程序。
for ($i = 0; $i -lt 25; $i++)
{
Start-Sleep -Milliseconds 200
[System.Windows.Forms.Application]::DoEvents()
}
请注意,这并不理想,但我不能与结果争论。小循环将为您提供5秒钟的延迟,而DoEvents()
部分将阻止您的表单停止响应。基本上,它每200毫秒检查一次中断,从而给人以表格处于活动状态的印象。
根据需要使循环计数为50,并将时间减少到100ms。结果相同,但响应速度更快。
答案 1 :(得分:0)
正如Drew所指出的那样,您的代码未显示您开始,停止或处置计时器对象的位置。
下面的这种非常简单的形式创建了一个计时器,当用户单击按钮时该计时器将启动。在计时器的Tick
事件中,它再次自行关闭。
它不会删除标签,而是从视图中隐藏和取消隐藏它。
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Test Timer'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.MinimumSize = New-Object System.Drawing.Size(300,150)
$form.StartPosition = "CenterScreen"
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(($form.Width - 20),50)
$label.Text = "Hi There"
$label.Anchor = "Top","Left","Right"
$label.Visible = $false
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 5000
$timer.Add_Tick({
# hide the label and stop the timer
$label.Visible = $false
$timer.Stop()
})
$button = New-Object System.Windows.Forms.Button
$button.Location = New-Object System.Drawing.Point(($form.Width - 185),($form.Height - 80))
$button.Size = New-Object System.Drawing.Size(75,23)
$button.Anchor = "Bottom","Left","Right"
$button.Text = "&Click Me"
$button.Add_Click({
# show the label and start the timer
$label.Visible = $true
$timer.Start()
})
# add the controls to the form
$form.Controls.Add($label)
$form.Controls.Add($button)
[void]$form.ShowDialog()
# when done, clean up the objects
$timer.Stop()
$timer.Dispose()
$form.Dispose()
希望能解释