创建一个标签,几秒钟后消失

时间:2019-06-18 02:13:15

标签: powershell

我正在努力实现以下目标

  1. 用户单击按钮
  2. Label1出现在左上方(文本=“ Hi there”)
  3. 标签1在5秒钟后消失

我尝试使用计时器功能,但是间隔设置似乎只是按时间间隔按其状态工作。

我不想使用Start-Sleep(开始睡眠)选项,因为我需要在出现此提示时使表单保持活动状态。

$timerPrompt = New-Object System.Windows.Forms.Timer
$timerPrompt.Interval = 3000
$timerPrompt.Add_Tick({$form.Controls.Remove($label1)})

2 个答案:

答案 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()

希望能解释