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
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
essayer
me.Activate()
Cette outta faire le tour
EDIT: je googlé pour trouver une sauvegarde pour ma réponse
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
<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.
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
Amener la fenêtre à l'avant d'où?
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.
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é.
Essaye ça:
Me.ShowDialog()
devrait aider.
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
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.
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
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
Dessinez un formulaire visible le plus visible hors de l'écran, puis définissez ce formulaire comme propriétaire de l'appel ShowDialog ().
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 à.
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.
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.
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
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()
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.
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!