2009-06-15 15 views
32

Este es un problema muy trivial, pero parece que no puedo encontrar una manera de resolverlo. Me molesta porque creo que debería saber la respuesta a esto, pero estoy buscando los términos incorrectos o buscando los métodos y propiedades incorrectos.¿Cómo puedo controlar la ubicación de un cuadro de diálogo cuando uso ShowDialog para visualizarlo?

Tengo un cuadro de diálogo de configuración que se llama desde dos lugares.

El primero es desde el botón del formulario que funciona correctamente, como era de esperar.

El segundo es de un menú contextual en notifyIcon en la bandeja del sistema, pero aquí aparece en la parte superior izquierda de la pantalla. Idealmente me gustaría que aparezca centrado en la pantalla principal, o quizás cerca de la bandeja del sistema.

  • He tratado de establecer la Location, pero esto parece ser anulado cuando dialog.ShowDialog() se llama.

  • He intentado usar la sobrecarga dialog.ShowDialog(IWin32Window), pero parece que no me gustó pasar null como el asa de la ventana.

  • En su lugar, he intentado usar dialog.Show(), pero (y aquí es donde podría estar fallando) la configuración de la ubicación no parece dar resultados consistentes.

  • Incluso he intentado configurar la propiedad dialog.Parent, lo que por supuesto produjo una excepción.

Sólo sé que voy a darse cuenta de que la respuesta es obvia cuando veo (con suerte) algunas respuestas, pero por el momento estoy completamente atascado.

Gracias por las respuestas, ya que sospechaba que era obvio, pero como de costumbre, me quedé atrapado en mirar por el camino equivocado. Lo más molesto es que también he usado esta propiedad del diseñador.

+1

Tenía el mismo problema. Para mí, funcionó para establecer la ubicación durante el evento de carga – TomB

Respuesta

38

Puede establecer la propiedad Form.StartPosition en FormStartPosition.Manual y luego establecer la propiedad Form.Location en la ubicación deseada. Cuando llame al ShowDialog, el formulario debe aparecer en la ubicación deseada.

MyForm frm = new MyForm(); 
frm.StartPosition = FormStartPosition.Manual; 
frm.Location = new Point(10, 10); 
frm.ShowDialog(); 
+3

System.Drawing.Point es el nombre completo de la clase Point – Argeman

21

Supongo que está utilizando un Formulario, en cuyo caso puede usar la enumeración Form.StartPosition. Puede encontrar más información al respecto here y el comportamiento de enumeración here.

4

Pruebe la propiedad StartPosition en el formulario.

Cuestiones relacionadas