2010-02-15 9 views
2

Il semble que la propriété la plus haute place parfois mon application au-dessus de toutes les autres, mais tout au long de mes tests, cela a été très bizarre car parfois cela fonctionne et la fenêtre reste au dessus de toutes les autres fenêtres. parfois, cela ne fait rien du tout. J'ai même essayé d'utiliser l'indicateur WS_EX_TOPMOST en le définissant avec l'appel de l'API Win32 à setWindowLong(). Aucun d'eux ne garde la fenêtre au-dessus. Y at-il une autre façon de garder une fenêtre sur chaque fenêtre ouverte en plus d'utiliser le plus haut? Ou y a-t-il autre chose que je devrais savoir au sujet de topmost?Form.TopMost fonctionne parfois

Répondre

1

En plus de Form.TopMost vous pouvez essayer l'API Win32 SetForegroundWindow.

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)] 
public static extern bool SetForegroundWindow(IntPtr hwnd); 

Puis appelez SetForegroundWindow(this.Handle).

2

J'ai eu la chance avec les appels api win32 suivants:

const int SW_SHOW = 5; 
BringWindowToTop(form.Handle); 
ShowWindow(form.Handle, SW_SHOW); 
5

J'utilise simplement ceci:

form.TopLevel = true; 
form.TopMost = true; 

qui rend le plus haut niveau de la fenêtre (il n'a pas de parent et se comporte comme la forme principale de l'application), puis s'assure qu'il est le plus haut (c'est-à-dire affiche au-dessus de toutes les autres fenêtres non-topmost). Cela a toujours fonctionné comme un charme.

Notez que je le fais avant d'afficher la fenêtre.

0

Fonctionne à 100%!

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