2010-01-16 14 views
7

Quiero centrar un formulario emergente iniciado utilizando Form.ShowDialog() en .NET Compact Framework. No veo ninguna propiedad como StartPosition en el objeto .NET CF Form.Cómo centrar un formulario usando showdialog (.NET Compact Framework)

¿Puede alguien sugerirme cómo centrar ventanas emergentes en .NET CF 3.5?

+0

Pruebe otras propiedades Consulte http://stackoverflow.com/questions/944897/show-a-child-form-in-the-centre-of-parent-form-in-c – Brij

Respuesta

11

Puede realizar un método de extensión que hace el trabajo por usted:

public static class FormExtensions 
{ 
    public static void CenterForm(this Form theForm) 
    { 
     theForm.Location = new Point(
      Screen.PrimaryScreen.WorkingArea.Width/2 - theForm.Width/2, 
      Screen.PrimaryScreen.WorkingArea.Height/2 - theForm.Height/2); 
    } 
} 

Usted lo llama así:

TheDialogForm f = new TheDialogForm(); 
f.CenterForm();    
f.ShowDialog(); 
+0

¡Esto no funciona! Sigo viendo que el formulario se coloca aleatoriamente en la pantalla. – Gopinath

+0

@Gopinath: eso es extraño; Probé el código antes de publicarlo. ¿Hay algún otro código que establezca la propiedad 'Location' or' Bounds' del formulario? –

+0

gracias fredrik.Cuando se probó en el dispositivo, la ventana emergente se centró como se esperaba. Pero cuando la aplicación se ejecutó en una PC, no se centró correctamente. Muchas gracias por su ayuda. – Gopinath

0

Ajuste las propiedades izquierda y superior en el de la forma de ' frmDialog_Activated caso

Private Sub frmDialog_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated 
     Me.Left = (frmMain.Width - Me.Width)/2 ' AS Your Wish 
     Me.Top = (frmMain.Height - Me.Height)/2 + 165 '' AS Your Wish 
    End Sub 
4

Si desea que su forma emergente aparecen en centro de la pantalla por defecto que ca n acaba de establecer una posición de inicio para él en propiedades de formulario, debe sonar como 'Center parent'.

Algo como esto:

form1.StartPosition = FormStartPosition.CenterScreen; 
+0

Como se señala en la pregunta, la propiedad 'StartPosition' no está disponible en .NET Compact Framework. –

+0

¡maldita sea! No responderé sobre cosas que usé hace mucho tiempo ... realmente :) – hoodoos

5

Si los padres no está definida para el diálogo a continuación, utilizar

login.StartPosition = FormStartPosition.CenterScreen; 
login.ShowDialog(); 

donde login es el Form objeto

o también se puede utilizar si está llamando a una matriz existente Form

login.StartPosition = FormStartPosition.CenterParent; 
login.ShowDialog(); 

Esta propiedad también se puede establecer en el cuadro de diálogo Propiedad del Form, si cree que la propiedad es siempre la misma para usted. Por defecto se debe establecer en CenterParent, que no funcionará en caso de que está invocando su Form antes que el padre Form en algunos casos, como la pantalla Inicio de sesión por primera vez, etc.

0

esta es la manera más fácil

Form f= new AmrDealForm(); 
f.CenterToScreen(); 
f.ShowDialog(); 
2

sé que esto es antiguo puesto, pero no tenía el mismo problema y lo resuelve con esta forma:

creo una interfaz:

public interface FormExtensions 
    { 
     void CenterForm(Form forma); 
    } 

Después de que hice implementa la interfaz en mi clase:

public partial class frmFirma : Form, FormExtensions 
    { 
     public frmFirma() 
     { 
      InitializeComponent(); 
     } 
     public void CenterForm(Form forma) 
     { 
      forma.Location = new Point(
      Screen.PrimaryScreen.WorkingArea.Width/2 - forma.Width/2, 
      Screen.PrimaryScreen.WorkingArea.Height/2 - forma.Height/2); 
     } 
    } 

entonces puedo cajón de una instancia de la: "frmFirma" una llamada al método "CenterForm":

private void pictureBox1_DoubleClick(object sender, EventArgs e) 
     { 
      Formas.frmFirma firma = new Formas.frmFirma(); 
      firma.CenterForm(firma); 
      firma.ShowDialog();  
     } 

espero que esto funciona para alguien.

Cuestiones relacionadas