web-dev-qa-db-fra.com

VB.net place la fenêtre au premier plan

Quel code dans VB.net 2010 dois-je définir pour qu'une fenêtre apparaisse au premier plan de l'écran?.

Ce que je cherche à faire est d’afficher un type d’alerte urgente, c’est un formulaire, pour certaines raisons je n’utilise pas la boîte de message.

Quelqu'un a suggéré le code suivant, mais cela ne fonctionne pas:

  Private Sub frmMessage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.BringToFront()
    End Sub
10
developer__c

Il devrait suffire que vous définissiez la propriété TopMost de la fenêtre dont vous avez besoin pour aller au-dessus des autres.

Form.TopMost = True

20
ste.xin

essayer

me.Activate()

Cette outta faire le tour

EDIT: je googlé pour trouver une sauvegarde pour ma réponse

Mon cas

EDIT2:

Il semble y avoir quelques choses qui fonctionnent. ci-dessus ainsi que

''depending on setup
Me.Show
Form2.Show()

également

Form2.ShowDialog()

également

Form2.Visible = True
11
sealz
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As IntPtr
End Function

<DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

Maintenant, prenez le nom de la fenêtre que vous voulez mettre au premier plan et procédez comme suit:

string name = "Untitled - Notepad";
IntPtr ptr = FindWindow(null, name);
SetForegroundWindow(ptr);

Cela amènera la fenêtre à l'avant de l'écran.

6
Brian Graham

Essayez d’utiliser l’événement .Shown . Voici le code pour un test en trois formes. À la fin de l'événement de clic sur un bouton, Form3 doit figurer en haut de Form2, en haut de Form1.

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.SendToBack()
        Dim f2 As New Form2
        f2.Show()
        Dim f3 As New Form3
        f3.Show()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Me.BringToFront()
    End Sub
End Class

Public Class Form3
    Private Sub Form3_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Me.BringToFront()
    End Sub
End Class
3
dbasnett

Amener la fenêtre à l'avant d'où? 

MDI

Dans MDI avec plusieurs formulaires, form.BringToFront() sera suffisant, cela déplacera le formulaire par dessus dans votre application . Vous pouvez également utiliser la méthode form.ShowDialog() pour présenter l'avertissement/l'erreur. 

Bureau

Sur votre bureau, vous pouvez avoir plusieurs applications, il vaut mieux configurer l’application en tant que TopMost. 

Si votre application est derrière une autre fenêtre, le message d'avertissement peut ne pas être visible. 

Pour mettre la application au début, vous avez besoin de plus de travail, il s’agit des "extensions" de la classe "formulaire", de sorte que l’utilisation sera: form.MakeTopMost():

<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function

Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)

<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeTopMost(frm As Form)
    SetWindowPos(frm.Handle(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeNormal(frm As Form)
    SetWindowPos(frm.Handle(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

comme toujours, le code d'extension doit être dans un module séparé.

1
fcm

Essaye ça:

Me.ShowDialog()

devrait aider.

0
user9945189

Je sais que c'est un peu vieux mais j'ai eu un problème similaire aujourd'hui c'est comment je l'ai résolu. Cela fonctionne tant que cela ne vous dérange pas de fermer le formulaire ouvert et d'en créer un nouveau.

 Dim MyRemoteForm As New Form
    MyRemoteForm = Application.OpenForms("frmManualRemote")
    If MyRemoteForm Is Nothing Then
        frmManualRemote.Show()
    Else
        frmManualRemote.Close()
        frmManualRemote.Show()
    End If
0
user2180706

Comme l’a écrit un autre utilisateur, l’une de mes méthodes préférées consiste à définir le propriétaire des formulaires. En faisant cela, le formulaire enfant restera toujours au-dessus du formulaire parent lorsque l'un des formulaires est ciblé, activé, etc. Ce qui est sympa, c'est que vous n'avez pas à intercepter d'événements spéciaux et à exécuter un code spécial. Supposons que vous ayez un formulaire principal frmMain et un formulaire contextuel frmPopup, vous pouvez utiliser le code suivant pour vous assurer que le menu contextuel est toujours au-dessus du formulaire principal sans utiliser topmost (ce qui fonctionne mais peut avoir des effets secondaires négatifs).

frmPopup.show(frmMain)

ou vous pouvez utiliser la version plus longue (comme indiqué ci-dessus par quelqu'un

frmPopup.Owner = frmMain
frmPopup.show()

Une autre grande chose à ce sujet est que vous pouvez également l'utiliser avec ShowDialog ()

frmPopup.ShowDialog(frmMain)

Je sais que ceci est un ancien post, mais peut-être que les gens qui recherchent toujours des solutions faciles trouveront ceci. Cela a vraiment aidé à améliorer la fonctionnalité de mes programmes avec beaucoup moins de code que je l'utilisais auparavant.

0
CrazyC

Je l'ai résolu de cette façon (cela peut être utile à quelqu'un) - de cette manière, il met la forme cachée au premier plan même en mode débogage

Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
    If Me.WindowState = FormWindowState.Minimized Then
        HideForm()
    Else
        BringFormToFront()
    End If
End Sub


Private Sub NotifyIcon_Click(sender As Object, e As EventArgs) Handles NotifyIcon.Click
    'Determine which mouse button was pressed, in order to differentiate between Left/Right Mouse Button
    Dim MouseButton As System.Windows.Forms.MouseEventArgs = CType(e, MouseEventArgs)
    If MouseButton.Button = MouseButtons.Left Then
        BringFormToFront()
    End If
End Sub

Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick
    BringFormToFront()
End Sub

Private Sub HideForm()
    Me.NotifyIcon.Visible = True
    Me.ShowInTaskbar = False
    'Windowstate controlled by user when minimizing Form
   Msgbox("Minimized, click on Notify Icon to show")
End Sub

Private Sub BringFormToFront()
    Me.NotifyIcon.Visible = False
    Me.ShowInTaskbar = True
    Me.WindowState = FormWindowState.Normal
End Sub
0
dragonfly

Si ce que vous voulez est amené à, après que la winfom ait perdu le focus ou ait été minimisée Dans mon cas, travaillez quand j'ouvre un winform à un bouton.

    frmProducts.Show()
    'Retorre the original State
    frmProducts.BringToFront()
    frmProducts.WindowState = FormWindowState.Normal
0
Andrei Rojas

Dessinez un formulaire visible le plus visible hors de l'écran, puis définissez ce formulaire comme propriétaire de l'appel ShowDialog ().

0
Jim Nolan

Lorsque rien ne fonctionne, essayez un clic droit et sélectionnez Mettre au premier plan. Si d'autres images couvrent celle qui doit être au premier plan, il suffit de cliquer avec le bouton droit de la souris sur chacune d'elles et de sélectionner Envoyer à.

0
user2364446

Définissez simplement la propriété Owner du formulaire que vous souhaitez voir apparaître en haut:

Dim frmMessage As New Form()
frmMessage.Owner = frmMain   'frmMain is the form creating the message window
frmMessage.Show()

Maintenant, frmMessage sera toujours au-dessus de frmMain, quel que soit le focus.

0
alldayremix

J'utilise:

dim tempResult as dialogResult = frmName.showDialog()

et sous la forme appelée:

me.dialogResult = dialogResult.{OK, Abort, whatever}

Le code du formulaire appelant attend le résultat du formulaire appelé avant de poursuivre son exécution.

0
owsleyskid

Ce qui suit m'a semblé plus facile de faire apparaître un formulaire appelé "Projets" après avoir cliqué sur un choix de menu. Le formulaire sera chargé si nécessaire, minimisé UN si nécessaire, et présenté au premier plan ("focus"). 

Private Sub ProjectsToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ProjectsToolStripMenuItem1.Click

    Me.Cursor = Cursors.WaitCursor       ' if form is slow to load for any reason
    Projects.Show()
    Me.Cursor = Cursors.Default
    Projects.WindowState = FormWindowState.Normal
    Projects.Focus()

End Sub
0
Matt D

Pour prendre ce que Jim Nolan a dit de faire basé sur sa description. C’est le meilleur moyen de s’assurer que le formulaire est correctement placé au début de tous les autres formulaires, ainsi que de l’éliminer, de céder la propriété du nouveau formulaire et de montrer le formulaire. 

Dim form As Form = new Form
form.TopMost = True
form.Owner = Me
form.ShowDialog()
form.Dispose()
0
DotNet Programmer

Un peu hors de l'OP ... J'ai un "tableau de bord" que j'ouvre à partir d'un menu. L'utilisateur peut basculer vers d'autres fenêtres, puis "charger" le tableau de bord à nouveau. S'il est déjà chargé, il est amené au premier plan.

Déclarez frmFISDash = frmFISDashboard "global" 

    If frmFISDash Is Nothing Then
        frmFISDash = New frmFISDashboard
        frmFISDash.Show()
    Else
        frmFISDash.WindowState = FormWindowState.Normal
        frmFISDash.BringToFront()
    End If

Notez le paramètre de .WindowsState - si le formulaire est réduit au minimum .bringToFront ne fonctionne pas.

0
rheitzman

Mon exigence était de faire apparaître une application éventuellement minimisée et de la maximiser et de l'activer. Après avoir parcouru un peu le net, j'ai trouvé une partie de la réponse dans un forum c ++.

WindowState = FormWindowState.Maximized
Me.Activate()

Cela a pris ma demande dans n'importe quel état (maxxed, mini'd, grand, petit, derrière des choses). il l'a amené à l'avant et l'a maximisé à l'écran. c'est-à-dire l'a fait apparaître à l'écran pour que je puisse le voir!

0
shadetree