2012-06-26 8 views
5

En mi C# Winform (VS 2010/C#/.Net 3.5), he creado un botón en el diseñador. Quiero mover y cambiar el tamaño de ese botón a una ubicación diferente en función de la configuración de un usuario al inicio de ese formulario.Mover la ubicación de un botón una vez que ya está dibujado

En caso de carga de mi forma, tengo el siguiente código para mover y cambiar el tamaño del botón:

btnShare.Location = new System.Drawing.Point(16, 496); 
btnShare.Margin = new System.Windows.Forms.Padding(4); 
btnShare.Size = new System.Drawing.Size(408, 126); 

Todo el código para crear el botón * es .designer.cs archivo de esta forma particular.

El problema es este: cuando se carga el formulario, puedo ver el botón en su nueva ubicación en función de las 3 líneas de código anteriores. Pero luego, cuando el formulario termina de cargar y atravesar todos sus eventos, el botón vuelve a su ubicación original que está en el método * .designer.cs InitalizeComponent().

No quiero quitar el código del archivo * .designer.cs y ponerlo solo en el archivo .cs del formulario porque todavía quiero poder ver el botón en el diseñador cuando trabajo en el diseño de la forma.

Solo quiero mover y cambiar el tamaño del botón si el usuario tiene esa opción activada al cargar el formulario.

¿Cómo puedo hacer esto ya que .Net parece dibujar los botones en mi formulario después de que se haya procesado el evento de carga, moviendo el botón de regreso a su lugar original?

+2

'InitalizeComponent' solo debe ser llamado por su constructor que obtiene/debe ser llamado mucho antes del evento Load. Me gustaría poner un punto de interrupción al comienzo de InitalizeComponent para ver de dónde se está llamando. –

+0

¿En qué evento ocurre el código de movimiento y cambio de tamaño? –

+0

@Paul: InitalizeComponent recibe una llamada antes del evento de carga, pero parece que los botones no aparecen hasta que se completan todos los eventos. Cuando se carga mi formulario, puedo ver el mismo botón en dos lugares diferentes (la ubicación original en designer.cs y la nueva ubicación que tengo en el evento load). Pero tan pronto como se carga el formulario, el botón que está en la segunda ubicación desaparece, y solo me queda el botón original que se creó en designer.cs. Es como si el código en designer.cs que tamaños/ubicaciones el botón está anulando el código que tengo en el evento de carga. – fraXis

Respuesta

7

Aquí hay un código que acabo de agregar. Y funciona para mi.

Este es un SSCCE, un ejemplo correcto, autónomo y correcto. Muy útil al hacer preguntas sobre SO.

* Ya que no sé cuál es su problema específico es la correcta , parte podría no ser precisa en este caso

tratar de hacer una copia de este proyecto, y ver si usted experimenta la misma problema. Si no lo hace, realmente no podemos ayudarlo mucho sin obtener más información sobre su proyecto.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      button1.Location = new Point(40, 40); 
     } 
    } 
} 
Cuestiones relacionadas