2015-08-09 4 views
0

У меня есть первая форма, которая всегда отображается в пути:Как показать форму поверх других?

  1. максимизируется и как содержание в PrintScreen из atual экрана
  2. всегда на вершине
  3. без границ

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

Вот как я делаю для показа первой формы:

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     For Each s As Screen In Screen.AllScreens 
      Dim Locker As New Form2(s, 0.3) 
      Locker.Show() 
     Next 
    End Sub 

End Class 

======================= ==================================================

Public Class Form2 
    Public Sub New(ByVal scrn As Screen, ByVal FrmOpacity As Double) 
     InitializeComponent() 
     Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
     Me.StartPosition = FormStartPosition.Manual 
     Me.Bounds = scrn.Bounds 
     Me.TopMost = True 
     Me.Opacity = FrmOpacity 
     Me.ShowInTaskbar = False 
     Me.BackgroundImageLayout = ImageLayout.None 
     CaptureScreen(scrn) 
    End Sub 

    Private Sub CaptureScreen(ByVal s As Screen) 
     Using ScreenImg As New Bitmap(s.Bounds.Width, s.Bounds.Height) 
      Using g As Graphics = Graphics.FromImage(ScreenImg) 
       g.CopyFromScreen(s.Bounds.Location, Point.Empty, ScreenImg.Size, CopyPixelOperation.SourceCopy) 
      End Using 
      Me.BackgroundImage = New Bitmap(ScreenImg) 
     End Using 
    End Sub 
End Class 
+0

Почему не задано Form1 «TopMost = False», когда вы показываете Form2? – paulsm4

+0

Проверьте [шаблон MDI] (https://msdn.microsoft.com/en-us/library/xyhh2e7e (v = vs.110) .aspx). – Eminem

ответ

0

Что вы хотите, это модальный диалог. Я не знаю, VB.NET, но в C# .Net, если вы говорите,

NameOfFormThatShouldBeOnTop.Show(); 

Форма будет просто показать, но не обязательно быть на вершине. Однако, если вы идете

NameOfFormThatShouldBeOnTop.ShowDialog(); 

Это будет принудительно сверху. С documentation, похоже, что это в vb довольно похоже. Я бы предположил, что это будет что-то вроде

NameOfFormThatShouldBeOnTop.ShowDialog() 

Если я получил, что синтаксис не так, не стесняйтесь редактировать :)

1

Вы можете просто установить Owner из form2 быть form1

Public Class Form1 

    ..... 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     For Each s As Screen In Screen.AllScreens 
      Dim Locker As New Form2(s, 0.3) 
      Locker.Show(Me) 
     Next 
    End Sub 

    ..... 

End Class 

Передача экземпляра Form1 в метод Show формы Form2 будет устанавливать переданный экземпляр Form1 как Owner всех форм Locker, которые вы создадите в своем цикле. Таким образом экземпляр Form2 всегда будет находиться над экземпляром Form1. Конечно, вы можете удалить настройку TopMost=True собственности, которые могут быть отнесены только к одной форме, в то время (только одна форма может быть TopMost)

Из MSDN на владельца формы собственности

Когда форма принадлежит другой форме, она закрыта или скрыта с формой владельца . Например, рассмотрим форму с именем Form2, которая принадлежит форме Form1. Если Form1 закрыт или сведен к минимуму, Form2 также закрыт или скрыт. Собственные формы также не отображаются за их формой владельца . Вы можете использовать принадлежащие формы для окон, такие как find и заменить окна, которые не должны исчезать при выборе формы владельца . Чтобы определить формы, принадлежащие родительской форме, используйте свойство OwnedForms.

+0

в моем случае, класс Form2 - это моя Form1, и я хочу показать другую форму («Form2») над Form1. Но Form1 (форма Locker) не позволяет это сделать. Эти команды отправляются из моего приложения сервера в клиентское приложение, «Open Form Locker» и после «Open Form2». –

0

Вы можете попытаться загрузить Sub после загрузки или ПОКАЗАН событий, который будет содержать следующий код:

private sub LeaveMeAtTop() 
    Me.Topmost = True 
    Me.TopLevel = true 
    Me.Activate() 
    Me.ResizeRedraw() = true 
    Me.ResumeLayout() 
    Me.Focus() 
end sub 

Это заставит форму, который будет отображаться в верхней части всех

Смежные вопросы