this.TopMost = true non funziona?

Sono molto nuovo con C # e sto ancora cercando di capirlo (con l’aiuto di alcuni amici molto pazienti).

Ho un problema con l’impostazione della proprietà TopMost un nuovo modulo di TopMost su true . Ho due (quasi) forms identiche; 1 che funziona bene e uno che non funziona.

Entrambe le forms hanno la proprietà TopMost impostata su true .

  • Form1 mostra la finestra e quando provo a fare clic su di esso, il modulo lampeggia alcune volte e emette un segnale acustico di Windows.
  • Form2 mostra anche il modulo ma quando faccio clic dietro di esso, il modulo si oscura (o perde lo stato attivo) e posso fare clic sul modulo principale.

Ho cercato una risposta a questo problema e ho trovato una risposta che suggeriva di inserire this.TopMost = true; nell’evento di caricamento del modulo ma non ha funzionato.

L’unica cosa che ho modificato che può avere o meno un effetto è che Form1 è stato creato con .NET 4.5 impostato nelle proprietà e prima di creare Form2, l’ho modificato in .NET 3.5 (profilo client). Ho provato a cambiarlo ma non ha aiutato. Prima di eliminare e creare nuovamente Form2, qualcuno ha qualche idea?

Molte grazie in anticipo. (Se hai bisogno di ulteriori informazioni, per favore fammelo sapere)

TopMost è una proprietà che viene utilizzata per assicurarsi che una finestra venga sempre visualizzata sopra tutte le altre all’interno di un’applicazione. L’esempio di Microsofts era uno strumento di ricerca e sostituzione.

La differenza che stai riscontrando è che Form1 è stato creato come una finestra di dialogo modale attraverso l’uso di ShowDialog . Mostra finestra di dialogo per assicurarsi che il tuo modulo debba essere chiuso prima che tutte le altre windows dell’applicazione possano essere riutilizzate. Per esempio; utilizzando un modulo per ottenere dati utente da inserire in un database di moduli padre.

Mostra è usato quando non ti dispiace se il tuo utente ha finito con la loro finestra di dialogo o no, come ad esempio consentire all’utente la possibilità di utilizzare qualche utilità (ad esempio timer, cronometro) che assisterà nella funzione principale di un programma.

L’unica differenza visiva che posso pensare quando si usano diversi framework .Net, sono windows di dialogo diverse come OpenFileDialog, che sono state aggiornate in tutto il framework

Potrebbe aiutarti;

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

Questo collegamento da Microsoft conferma che potrebbe essere un bug in Windows 7 e Windows Server 2008 R2 L’ho affrontato in un sistema Windows 7 Embedded e la patch fornita risolve il problema, quindi ti preghiamo di dare un’occhiata 🙂

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

Spero che aiuti!

Il modo migliore per farlo! Funziona al 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); 

Ho un problema simile nella mia soluzione. Dopo aver usato la funzione Show sovraccaricata ha funzionato:

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

Aggiungi il seguente codice nell’evento Mostrato :

 this.TopMost = true; this.Focus(); this.TopMost = true;