En tiempo de ejecución .NET alojado y ventana de enfoque, problemas e inconsistencias

StackOverflow https://stackoverflow.com/questions/211634

  •  03-07-2019
  •  | 
  •  

Pregunta

Tenemos una aplicación Win32 que aloja el tiempo de ejecución .NET y abre los formularios administrados .NET desde la parte Win32 de la aplicación.

Estas ventanas siempre se abren como ventanas modales.

En algunas máquinas, cuando se cierran estas ventanas, la ventana de Win32 que se encuentra detrás no se enfoca, sino que se envía detrás de Word, Outlook o cualquier otra cosa que pueda tener abierta.

También, a veces, si abrimos un formulario .NET de este tipo, luego alt-tab to Word o alguna otra aplicación, y luego hacemos clic en el icono de la barra de tareas de nuestra aplicación, aparecerá la ventana de Win32. Esto, por supuesto, sigue esperando que se cierre la ventana modal de .NET, por lo que, por supuesto, no se puede utilizar. Si seleccionamos la tecla alt para otra cosa y simplemente minimizamos esa otra cosa, entonces nuestra ventana .NET vuelve a aparecer.

La parte inconsistente es que esto ocurre solo en algunas máquinas, y no en todas. En muchas máquinas, la mía incluida, funciona exactamente como se esperaba. El enfoque hacia la ventana derecha funciona siempre.

No dudo que hayamos hecho algo mal, pero no puedo averiguar cuál es el problema.

¿Alguien tiene alguna idea de lo que debería estar buscando? Hemos examinado los tiempos de ejecución de .NET instalados, y dado que dos máquinas de este tipo en las que funciona en una, pero no en la otra, son máquinas de desarrollador, contienen los mismos paquetes de servicio para .NET, etc.


Editar: Bueno, @sam , tenías razón en que teníamos algo diferente Configuraciones en este carril. Ambas máquinas ejecutan Windows XP SP3, pero la mía ejecutaba el tema clásico de Windows, y la otra ejecutaba el nuevo tema de XP. Cambiar el tema en esa otra computadora a clásico eliminó el problema, pero cambiarlo de nuevo al tema de XP no lo hizo reaparecer.

Así que ahora tenemos dos máquinas en las que funciona, y el cliente todavía tiene el problema, aunque aparentemente el cliente ejecuta un tema clásico.

¿Fue útil?

Solución

Últimamente noté que el enfoque de la ventana se establece de manera diferente en windows vista Aero como solía estar en XP. En lugar de la última ventana activada de una aplicación que recibe el foco, la ventana principal recibirá un enfoque en la reactivación.
Lo curioso es que, al cambiar la vista al tema de las ventanas de estilo antiguo (clásico o básico), el enfoque se establecerá en la ventana secundaria que la tenía por última vez, al igual que en XP.

Su problema puede ser muy diferente, pero ¿tal vez tiene diferentes versiones de SO?

Otros consejos

Este problema me recuerda que WPF tiene el mismo problema con mostrar diálogos desde una ventana principal.

Supondré que se refiere a la versión 2.0 de .NET framework y que tiene un módulo nativo que llama al ensamblado .NET.

Cualquier control desde Windows Forms (que incluye también los formularios), implementa una interfaz llamada IWin32Window , que expone el asa Win32 de esa ventana.

Lo que podría hacer es usar un NativeWindow para escuchar WM_ACTIVATEAPP o cualquier evento que indique que tu aplicación tiene un enfoque y envía una señal a la ventana de .NET para obtener el foco.

Otra opción sería usar un diálogo nativo que aloje un control de usuario .net en lugar de winforms (si es posible).

He hecho esto antes sin demasiada prisa, usando C ++ \ CLI, pero ahora mismo no me viene a la mente. Tal vez este sea un buen punto de partida para ti.

Recuerdo haber ayudado a un amigo con el mismo problema (no puedo recordar si estuvo en .net 2.0 o 3.5)

Supongo que en su formulario principal usted crea nuevos formularios y los utiliza

Form2 form2 = new Form2();
form2.ShowDialog();

Para mostrar la ventana emergente modal, ahora parece que parece que el método ShowDialog no usa el formulario que llama a ShowDialog como su controlador por defecto, por lo que debe hacerlo

form2.ShowDialog(this);

de esta manera, la aplicación, que yo sepa, sabe a qué maneja volver y, por lo tanto, siempre vuelve a tu main desde.

Información adicional en el formulario de ShowDialog msdn: http://msdn.microsoft.com/en-us/library/w61zzfwe. aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top