7
votes

Fixation de la fenêtre sur une fenêtre de causes maximisée pour apparaître trop tôt

J'ai lu que l'événement Charger CODE> est censé être tiré après la création de la poignée de la fenêtre, mais avant em> la fenêtre devient visible. Pour la plupart, cela semble être vrai. Cependant, j'ai constaté que lorsque je crée un formulaire avec le jeu de propriétés code> Windowstate code> sur formwindowstate.maximisé code> (via le concepteur VS, ou par programme dans le constructeur), le La fenêtre devient visible avant le Charger CODE> Evénement de tir. Par exemple:

using System;
using System.Windows.Forms;

namespace MyApplication
{
    public partial class MyForm : Form
    {
        public MyForm()
        {
            InitializeComponent();
            WindowState = FormWindowState.Maximized;
        }

        protected override void OnLoad(EventArgs e)
        {
            MessageBox.Show("OnLoad - notice that the window is already visible"); 
            base.OnLoad(e);
        }
    }
}


3 commentaires

Que messagebox.show dans l'événement de chargement forcera le formulaire à afficher.


Redimensionnement des commandes dans l'événement est quelque peu méfiant. Pourquoi ne fiez-vous pas sur les mécanismes de redimensionnement intégrés pour les contrôles, tels que Dock ou ancreur propriétés ou le TableLayOntPanel ? Voulez-vous redimensionner manuellement les contrôles lorsque je redimensionnez la fenêtre manuellement plus tard?


Je reçois ça aussi. Je sauvegarde la fenêtre entre les sessions utilisateur afin que le formulaire puisse être redimensionné, etc. à ce que l'utilisateur avait précédemment l'avaient et lorsque je définissais le windowstate à maximiser, je reçois beaucoup de scintillement, etc. Y a-t-il une solution pour résoudre ce problème?


4 Réponses :


0
votes

Des choses qui changent l'apparence de la fenêtre (redimensionnement par exemple) font que la fenêtre devienne visible.

Vous pouvez appeler .Hide () ou Visible = false dans votre CTOR et le rendre visible à nouveau à la fin de la charge. Charger


1 commentaires

Le réglage visible sur FALSE ne semble avoir aucun effet. Cela pourrait avoir quelque chose à voir avec le fait que la forme est la principale forme de l'application et affichée via application.Run



1
votes

Si vous devez mettre un message de diagnostic dans l'événement de chargement, utilisez System.Diagnostics.debug.writeline ();
Si vous utilisez MessageBox, vous détruirez l'ordre d'écoulement normal des événements.

protected override void OnLoad(EventArgs e)         
{             
     System.Diagnostics.Debug.WriteLine("onLoad");              
     base.OnLoad(e);         
} 


0 commentaires

2
votes

Essayez de retarder le changement de fenêteur jusqu'à la première cuisson d'événement activé. Cela fonctionne pour moi dans vb.net avec VS2005 et Framework 2.0.


1 commentaires

Cela a fonctionné pour moi lorsque le Windowstate était remplacé par la normale de maximiser. Au lieu de cela, je l'ai mis à maximiser dans l'événement de la charge de la fenêtre.



2
votes

Vous devez définir Windowstate avant initializecomonent (): xxx


0 commentaires