2010-11-02 19 views
0

Im essayant de cacher une fenêtre en utilisant cette ligne de codefenêtre Masquer l'aide SetWindowPos doesnt cacher combobox

SetWindowPos(d, IntPtr.Zero, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0004 | 0x0010 | 0x0080); 

La méthode SetWindowPos est celle de user32.dll La plupart du temps, il fonctionne très bien, si un combobox est ouvert lorsque je cache la fenêtre la liste de la liste déroulante reste visible.

Qu'est-ce que je fais mal?

Répondre

1

SetWindowsPos ne masque pas la liste déroulante car la liste déroulante de la liste déroulante n'est pas un enfant de la liste déroulante, elle n'est donc pas affectée par SetWindowsPos.

(Vous pouvez utiliser Spy ++ pour voir le parent de la liste déroulante, qui est NULL - ce qui signifie le bureau est son parent, en contraste avec le contrôle ComboBox qui est parent est la forme qu'il est)

Pourquoi ne pas utiliser la méthode Form.Hide() qui masque correctement la fenêtre et la liste déroulante de la liste déroulante?

+0

Merci pour votre réponse. Je ne pense pas que je peux utiliser Form.Hide() parce que la fenêtre im essayant de cacher n'est pas dans le code managé. – CruelIO

+0

Oh, vous n'avez pas spécifié cela depuis le début. Dans ce cas, vous devez utiliser la fonction ShowWindow de l'API Win32 avec le paramètre SW_HIDE, via interop. –

+0

Cela a fait l'affaire. Merci beaucoup! Savez-vous s'il existe des différences dans le comportement SetWindowPos et ShowWindow dont je dois être conscient? – CruelIO