c# - tag - ¿Cómo se establece la posición de inicio de un formulario de Windows Forms con el código?
startposition c# (8)
Si hago un ShowDialog () y paso el padre, funciona ... pero realmente no quiero mostrarlo como un Diálogo.
Eso es correcto ya que ShowDialog establecería frm.Parent == nvShowDeals.Parent
Dado que está utilizando .Show (), entonces frm.Parent == null, por lo tanto FormStartPosition.CenterParent se ignora.
Entonces para cumplir esta función haría los siguientes cambios:
public DealsForm()
{
InitializeComponent();
//this.StartPosition = FormStartPosition.CenterParent;
}
//DealsForm_Load Event
private void DealsForm_Load(object sender, EventArgs e)
{
this.Location = this.Owner.Location; //NEW CODE
}
Y aquí haría los siguientes cambios:
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
frm.StartPosition = FormStartPosition.Manual; //NEW CODE
frm.Show(this);
}
¿Hay alguna manera de establecer la posición de inicio de un formulario de formularios de Windows mediante el código? Parece que lo que sea que intente resultados en el StartPostion es el predeterminado.
Esto es lo que estoy haciendo en la forma de mostrar:
public DealsForm()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
}
Esto es lo que estoy haciendo para mostrar el formulario:
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
frm.Show(this);
}
Intenté poner lo siguiente en cada uno de los métodos anteriores, sin éxito:
this.StartPosition = FormStartPosition.CenterParent;
Si lo configuro a través del Editor de propiedades ... funciona perfectamente, pero realmente me gustaría hacerlo a través del código.
Debería ser una obviedad ... pero por mi vida parece que no puedo resolverlo ... tal vez necesito más cafeína.
Actualizar:
Si hago un ShowDialog()
y paso el padre, funciona ... pero realmente no quiero mostrarlo como un Diálogo.
¿Intentó establecer la propiedad en el método de llamada?
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
// Insert this
frm.StartPosition = FormStartPosition.CenterParent;
frm.Show(this);
}
Mi primera reacción es: experimentar un poco con VS2008. Debería estar en la pantalla de propiedades generales.
Si no tienes Visual Studio, entonces se vuelve un poco más difícil.
Un buen sitio para verificar podría ser este: csharp-online.net
Perdón por no poder ser más útil
Quizás no estás solo. Tal vez no estás loco. Lea esto (Comentarios del cliente de Microsoft Connect):
Cliente: "Windows Form StartPosition solo funciona para el método .ShowDialog y no para el método .Show. Nota: También he adjuntado código simple e imágenes de los resultados".
MS: "Desafortunadamente, no podremos solucionar este problema en particular en una versión futura, ya que una solución sería un cambio radical en el comportamiento de WinForms 1, 1.1 y 2"
Sugiero que revise su DealsForm.Designer.cs y elimine la línea que establece StartPosition allí, y luego lo hace tal como es.
Alternativamente, quizás intente configurarlo en los eventos Cargar o Mostrar del formulario en su lugar.
public DealsForm()
{
this.StartPosition = FormStartPosition.CenterParent;
InitializeComponent();
}
Intenta ponerlo antes de InitializeComponent (). Es posible que ya sea demasiado tarde después de InitializeComponent (es posible que el formulario ya se haya iniciado y StatPosition esté configurado demasiado tarde).
Actualizar
Acabo de escribir :
public Form1()
{
this.StartPosition = FormStartPosition.CenterScreen;
InitializeComponent();
}
Y:
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Show();
}
En un proyecto de VS (completamente nuevo) y cuando hago clic en mi form2 un botón, abre el formulario en el medio de la pantalla. Puedes hacer lo mismo con Parent ...
Para centrarme en el padre para la llamada .Show, esto es lo que tenía que hacer:
childForm.Location = new Point(
(parentForm.Location.X + parentForm.Width / 2) - (childForm.Width / 2),
(parentForm.Location.Y + parentForm.Height / 2) - (childForm.Height / 2));
childForm.StartPosition = FormStartPosition.Manual;
Puede hacer esto llamando a esto.CenterToParent () en el evento Form_Load (cuando el padre es realmente conocido). No llame a esto en el Constructor porque el padre se establece cuando se llama a Show (formulario).
private void myForm_Load(object sender, EventArgs e)
{
CenterToParent();
}
Sé que este hilo es antiguo, pero se puede responder con bastante facilidad, así que espero ayudar a otros que lo encuentren a encontrar la solución fácil.