2012-06-26 11 views
5

Sul mio C# Winform (VS 2010/C#/.Net 3.5), ho creato un pulsante nel designer. Voglio spostare e ridimensionare quel pulsante in una posizione diversa in base all'impostazione dell'utente all'avvio di tale modulo.Sposta la posizione di un pulsante dopo che è già stata disegnata

Nel caso in carico della mia forma, ho il seguente codice per spostare e ridimensionare il pulsante:

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

Tutto il codice per creare il pulsante è file * .designer.cs per questa particolare forma.

Il problema è questo: quando il modulo viene caricato, posso vedere il pulsante nella sua nuova posizione in base alle 3 righe di codice sopra. Ma poi quando il modulo ha finito di caricare e passare attraverso tutti i suoi eventi, il pulsante torna alla sua posizione originale che si trova nel metodo * .designer.cs InitalizeComponent().

Non voglio estrarre il codice dal file * .designer.cs e inserirlo solo nel file .cs del modulo perché voglio ancora poter vedere il pulsante nel designer quando lavoro sul design del modulo.

Voglio solo spostare e ridimensionare il pulsante se l'utente ha quell'opzione attivata al caricamento del modulo.

Come posso fare questo poiché .Net sembra disegnare i pulsanti sul mio modulo dopo che l'evento di caricamento è stato elaborato, spostando di nuovo il pulsante sul suo punto originale?

+2

'InitalizeComponent' deve essere richiamato dal costruttore che ottiene/deve essere chiamato molto prima dell'evento Load. Inserirò un punto di interruzione all'inizio di InitalizeComponent per vedere da dove viene chiamato. –

+0

In quale evento si verifica il codice di spostamento e ridimensionamento? –

+0

@Paul: InitalizeComponent viene chiamato prima dell'evento di caricamento, ma sembra che i pulsanti non vengano effettivamente visualizzati fino a quando non vengono eseguiti tutti gli eventi. Quando il mio modulo viene caricato, posso vedere lo stesso pulsante in due punti diversi (la posizione originale in designer.cs e la nuova posizione che ho nell'evento load). Ma non appena il modulo viene caricato, il pulsante che si trova nella seconda posizione scompare e mi rimane solo il pulsante originale creato in designer.cs. È come se il codice in designer.cs che dimensiona/posizioni il pulsante sta sovrascrivendo il codice che ho nell'evento load. – fraXis

risposta

7

Ecco un codice che ho appena aggiunto a spillo. e funziona per me.

Questo è un SSCCE, un esempio corretto semplice e autonomo. Molto utile quando si fanno domande su SO.

* Dal momento che io non so che cosa il vostro problema specifico è, il corretta, parte potrebbe non essere preciso in questo caso

cercare di fare una copia di questo progetto, e vedere se si verifica lo stesso problema. Se non lo fai, non possiamo davvero aiutarti molto senza ottenere ulteriori informazioni sul tuo progetto.

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); 
     } 
    } 
} 
Problemi correlati