9
votes

cela.topment le plus = vrai ne fonctionne pas?

Je suis très nouveau à C # et j'essaie toujours de me lever la tête (avec l'aide de quelques amis très patients).

J'ai un problème avec la définition d'un nouveau formulaire Windows Haut maximum propriété sur true . J'ai deux formes (presque) identiques; 1 qui fonctionne bien et un qui ne le fait pas.

Les deux formes ont le le plus haut Configuration de la propriété sur true .

  • Form1 montre la fenêtre et lorsque j'essaie de cliquer derrière elle, le formulaire clignote à quelques reprises et émet un bip Windows.
  • Form2 montre également le formulaire, mais lorsque je clique derrière, le formulaire grisa (ou perd la mise au point) et je peux cliquer sur le formulaire principal.

    J'ai recherché une réponse à ce problème et j'ai trouvé une réponse qui a suggéré de mettre en place this.toply = true; dans l'événement de charge du formulaire, mais cela n'a pas fonctionné.

    La seule chose que j'ai changée, ce qui peut avoir eu un effet est que Form1 a été créé avec .NET 4.5 définie dans les propriétés et avant de créer le formulaire2, j'ai changé cela en .NET 3.5 (profil client). J'ai essayé de le changer, mais cela n'a pas aidé. Avant de supprimer et de créer un formulaire2 à nouveau, quelqu'un a-t-il des idées?

    Merci d'avance. (Si vous avez besoin de plus d'informations, merci de me le faire savoir)


4 commentaires

Pourriez-vous poster le code?


Oui bien sûr. D'où? Désolé si cela semble stupide!


Form1 a été ouvert avec ShowDialog et Form2 a été ouverte avec spectacle, rien à voir avec le maximum. En d'autres termes, Form1 est modal


N'oubliez pas qu'un signe unique est un signe pour des missions, le signe double équivalent est l'opérateur d'égalité. Assurez-vous d'utiliser le bon!


6 Réponses :


7
votes

Cela peut vous aider;

frm.TopLevel = true;
frm.TopMost = true;


1 commentaires

Travaillé pour moi! Cela aide en cas de forme principale (formulaire de demande)



14
votes

Le plus haut est un Propriété utilisée pour s'assurer qu'une seule fenêtre est toujours affichée au-dessus de toutes les autres dans une application. Exemple Microsofts était un outil de recherche et de remplacement.

La différence que vous trouvez est que Form1 a été créée comme une boîte de dialogue modale via l'utilisation de showdialog . Afficher la boîte de dialogue S'assure que votre formulaire doit être fermé avant que toutes les autres fenêtres de l'application puissent être utilisées à nouveau. Par exemple; en utilisant un formulaire pour gagner des données utilisateur pour entrer dans une base de données des formulaires parent.

montre est utilisé Lorsque vous ne vous dérangeez pas si votre utilisateur a terminé avec leur boîte de dialogue ou non, ce qui permet de permettre à votre utilisateur la possibilité d'utiliser certains utilitaires (par exemple, la minuterie, le chronomètre) qui aidera dans la fonction principale d'un programme.

La seule différence visuelle que je puisse penser lorsque vous utilisez différents .NET Frameworks, est différente de dialogues Windows tels que OpenFileDialog, qui ont été mises à jour dans le cadre


1 commentaires

Soyez prudent avec l'utilisation du maximum pour une forme maximale: toute boîte de dialogue modale pouvant être affichée car les enfants de ce formulaire resteront cachés à l'arrière-plan!



3
votes

Ce lien de Microsoft Confirmez que cela pourrait être un bogue dans Windows 7 et Windows Server 2008 R2, je suis confronté à celui-ci dans un système embarqué Windows 7 et le correctif fourni le problème, s'il vous plaît considérer pour jeter un coup d'œil :)

http://support.microsoft.com/kb/2587473/en-us < / a>

J'espère que cela aide!


0 commentaires

2
votes

Le bricolage de le faire - fonctionne 100%!

public static class User32
{
    public const int SW_HIDE = 0;
    public const int SW_SHOW = 5;
    public const int SW_SHOWNORMAL = 1;
    public const int SW_SHOWMAXIMIZED = 3;
    public const int SW_RESTORE = 9;

    [DllImport("user32.dll")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport("user32.dll")]
    public static extern bool AllowSetForegroundWindow(uint dwProcessId);
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);


0 commentaires

0
votes

Je chapeau un problème similaire dans ma solution. Après avoir utilisé la fonction de spectacle surchargé, il a fonctionné:

frm.TopLevel = true;
frm.TopMost = true;
frm.Show(this)


0 commentaires

0
votes

Ajoutez le code suivant dans l'événement montré : xxx


0 commentaires