Переключение TopMost в VB.NET - PullRequest
       13

Переключение TopMost в VB.NET

2 голосов
/ 11 ноября 2009

У меня есть форма, которая должна быть на вершине в течение определенного периода времени, а затем может быть установлена ​​за другими окнами в обычном режиме. Есть ли что-то кроме установки Me.TopMost в True или False, что необходимо сделать? Я спрашиваю, потому что это, кажется, не работает.

1 Ответ

4 голосов
/ 11 ноября 2009

Это не должно представлять никаких проблем. Следующий код (C #, извините за это, нет среды VB.NET, где я сейчас нахожусь) устанавливает TopMost в true, ждет 5 секунд, а затем переключает TopMost обратно в false.

private void MakeMeTopmostForAWhile()
{
    this.TopMost = true;
    ThreadPool.QueueUserWorkItem(state =>
    {
        Thread.Sleep(5000);
        this.Invoke((Action)delegate { this.TopMost = false; });
    });
}

Обратите внимание, что это не влияет на Z-порядок окна сразу; когда TopMost установлен на false, окно все равно будет поверх других окон. Если окно находится поверх другого окна, которое также является самым верхним, оно будет перемещаться так, чтобы другое самое верхнее окно не закрывалось, но оно оставалось поверх других не верхних окон.

Обновление
Вот приведенный выше код в VB.NET ( с автоматическим преобразованием , не тестировался):

Private Sub MakeMeTopmostForAWhile()
    Me.TopMost = True
    ThreadPool.QueueUserWorkItem(Function(state) Do
        Thread.Sleep(5000)
        Me.Invoke(DirectCast(Function() Do
            Me.TopMost = False
        End Function, Action))
    End Function)
End Sub
...