Создание ярлыка, который исчезает через несколько секунд - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь добиться следующего

  1. Пользователь нажимает кнопку
  2. В левом верхнем углу появляется надпись Label1 (text = "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 голосов
/ 18 июня 2019

Как уже указывалось Дрю , ваш код не показывает, где вы запускаете, останавливаете или удаляете объект таймера.

Эта очень простая форма ниже создает таймер, который запускается, когда пользователь нажимает кнопку. В случае таймера 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()

Надеюсь, что это объясняет

0 голосов
/ 18 июня 2019

Я не очень хорош в программировании с графическим интерфейсом, но у меня есть прием, который решит эту проблему для вас, поскольку я использовал его во многих моих программах с графическим интерфейсом.

for ($i = 0; $i -lt 25; $i++)
{
    Start-Sleep -Milliseconds 200
    [System.Windows.Forms.Application]::DoEvents()
}

Имейте в виду, что это не идеальноно я не могу спорить с результатами.Небольшая петля даст вам задержку в 5 секунд, в то время как часть DoEvents() не даст вашей форме перестать отвечать на запросы.Обычно он проверяет прерывания каждые 200 мс, создавая впечатление, что форма активна.

Сделайте счетчик циклов 50 и сократите время до 100 мс, если хотите.те же результаты, но дополнительная отзывчивость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...