2011-07-07 15 views
44

Ha sido un desastre mostrar DialogBox en el centro de su forma principal. Aquí hay un método para mostrar un diálogo.Mostrar cuadro de diálogo en el centro de su elemento principal

estoy posicionando sus padres para centrar, pero no es capaz de centrar el DialogBox

private void OpenForm(Object point, Object height, Object width) 
{ 
    FormLoading frm = new FormLoading(); 
    Point temp = (Point)point; 
    Point location = new Point(temp.X + (int)((int)width)/2, 
           temp.Y + (int)((int)height)/2); 
    frm.Location = location; 
    frm.ShowDialog(); 
} 

private void btnView_Click(object sender, EventArgs e) 
{ 
    try 
    {      
     ThreadStart starter= delegate { OpenForm(currentScreenLocation, 
               this.Height, this.Width); }; 
     Thread t = new Thread(starter); 
     t.Start(); 
     ////// Some functionality here... 
     t.Abort(); 
    } 
    catch (Exception) 
    { 
    } 
} 
+2

También tendría cuidado con el multihilo. Las propiedades de control (al menos las que tienen que ver con la interfaz de usuario) solo se pueden cambiar desde el hilo en el que se crearon. No veo una imagen más grande aquí, así que no sé por qué creas cada formulario en su propio hilo, pero tenlo en cuenta. –

Respuesta

80

Es posible que desee comprobar la propiedad Form.StartPosition.

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.startposition.aspx

algo en la línea de:

private void OpenForm(Form parent) 
{ 
    FormLoading frm = new FormLoading(); 
    frm.Parent = parent; 
    frm.StartPosition = FormStartPosition.CenterParent; 
    frm.ShowDialog(); 
} 

Por supuesto, esto requiere el establecimiento principal del formulario.

+0

frm.StartPosition = FormStartPosition.Manual; frm.Location = ubicación; Lo usé y funcionó para mí :) –

+0

Configurándolo en FormStartPosition.CenterParent hace los cálculos por usted. Pero supongo que querrás conservar tu código si planeas hacer algo más complejo que centrar. Me alegra que hayas resuelto tu problema. –

+0

FormStartPosition.CenterParent no funcionó para mí. Solo quiero centrarlo. Pero el enlace provisto fue una clave para mí. Gracias por eso –

4

Además, si desea configurar la ubicación arbitraria puede utilizar esta

FormLoading frm = new FormLoading(); 
Point location = new Point(300, 400); 
frm.StartPosition = System.Windows.Forms.FormStartPosition.Manual; 
frm.Location = location; 
frm.ShowDialog(); 
1
NewForm.Show(); 

NewForm.Top = (this.Top + (this.Height/2)) - NewForm.Height/2; 
NewForm.Left = (this.Left + (this.Width/2)) - NewForm.Width/2; 
1

si usted está haciendo un cuadro de mensaje personalizado, se puede poner simplemente esto:

CenterToParent(); 

en su método personalizado MessageBox formload().

Cuestiones relacionadas