106 votes

Comment puis-je apporter ma fenêtre de l'application à l'avant?

Comment apporter ma fenêtre de l'application à l'avant? Par exemple quand mon application a besoin d'attention.

C'est à mon programme personnel. J'ai besoin de cette fonctionnalité.

C'est ce que j'ai. Mais c'est PAS de travail de 100% des fois.

public void BringToFrontToEnterCaptha()
{
    if (InvokeRequired)
    {
        Invoke(new Action(BringToFrontToEnterCaptha));
    }
    else
    {
        this.TopMost = true;
        this.Focus();
        this.BringToFront();
        this.textBox1.Focus();
        this.textBox1.Text = string.Empty;
        System.Media.SystemSounds.Beep.Play();
    }
}

public void BringToBackAfterEnterCaptha()
{
    if (InvokeRequired)
    {
        Invoke(new Action(BringToBackAfterEnterCaptha));
    }
    else
    {
        this.TopMost = false;
    }
}

Et je les appelle du fond de travailleur.

BringToFrontToEnterCaptha();
while (!ready)
{
    Thread.Sleep(100);
}
BringToBackAfterEnterCaptha();
Thread.Sleep(300);

Et après avoir appuyé sur bouton "Accepter" bool prêt est défini sur true.

Je fonctionne très bien mais pas toujours.

210voto

Mozly Points 455

Voici un morceau de code qui a fonctionné pour moi

this.WindowState = FormWindowState.Minimized;
this.Show();
this.WindowState = FormWindowState.Normal;

Il apporte toujours la fenêtre désirée à l'avant de tous les autres.

96voto

as-cii Points 7028

Utiliser Form.Activate() ou Form.Focus() méthodes.

64voto

Dennis Smit Points 682

Alors que je suis d'accord avec tout le monde, ce n'est pas-nice comportement, voici le code:

[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);   


SetForegroundWindow(Handle.ToInt32());

Mise à jour

David est complètement à droite, pour être complet, je comprend le point ici +1 pour David!

  • Le processus est le premier plan processus.
  • Le processus a été lancé par la processus de premier plan.
  • Le processus a reçu la dernière entrée de l'événement.
  • Il n'y a pas de processus d'arrière-plan.
  • Le processus de premier plan est en cours d' débogué.
  • Le premier plan n'est pas verrouillé (voir LockSetForegroundWindow).
  • Le premier plan délai de verrouillage a expiré (voir SPI_GETFOREGROUNDLOCKTIMEOUT dans SystemParametersInfo).
  • Aucun menu n'est actif.

46voto

Jon Points 194296

Utiliser Control.BringToFront:

myForm.BringToFront();

32voto

lupok Points 182

ceci fonctionne:

if (WindowState == FormWindowState.Minimized)
    WindowState = FormWindowState.Normal;
else
{
    TopMost = true;
    Focus();
    BringToFront();
    TopMost = false;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X