2010-12-06 16 views
0

Je veux exécuter mon formulaire (avec tous les contrôles désactivés) et au-dessus il y aura un autre formulaire pour le nom d'utilisateur et mot de passe exécuté comme showDialog! les gens ne pourront pas accéder au formulaire principal sans se connecter!C# exécutez un formulaire puis affichez un autre formulaire avec showDialog?

private void Form1_Load(object sender, EventArgs e) 
     { 
      this.Show(); 
      Form2 f2 = new Form2(); 
      f2.ShowDialog(); 
     } 

J'ai essayé le code ci-dessus et la dose ne fonctionne pas comme il se doit!

comment puis-je y arriver comme je le souhaite?

acclamations

+2

Je vois un point d'interrogation, mais la phrase qui le précède ne sonne pas comme une question. – Bobby

+0

Je pense que l'OP veut savoir où la position correcte est de charger directement un deuxième formulaire, après que le premier formulaire est montré. – VVS

Répondre

2

de la forme mère:

childForm.ShowDialog(this); 

qui fera le formulaire enfant modal à la forme mère. En ce qui concerne l'emplacement, il existe une propriété hors du formulaire (que vous voulez définir sur le formulaire enfant) qui lui indique par où commencer (écran central, parent central, etc.)

System.Windows. Forms.Form implémente IWin32Window, c'est pourquoi cela fonctionne.

0

erm ...

DialogResult result = mySecondForm.ShowDialog() 

qui désactive la forme de parent jusqu'à ce que celui-ci est fermé. DialogResult sera une valeur ENUM est quelque chose comme OK/Annuler/OuiNon etc

+0

Je crois sans passer une référence à la forme que vous voulez modale à, il rendra le formulaire modal de l'enfant à l'ensemble de l'application, ce qui peut ou peut ne pas être le comportement souhaité. –

+0

Probablement vrai. Il peut cela passer comme cela dans votre exemple. Ne pas passer cela et le rendre modal l'ensemble de l'application obligera l'utilisateur à finir sur cet écran en premier. Sinon, il peut aller "se cacher". – Andre

2

On ne sait pas ce que la question/question, mais vous pouvez essayer de faire en sorte que vous passez dans la forme parente, à savoir

using(var childForm = new MySpecialLoginForm(...)) { 
    childForm.ShowDialog(this); 
} 
0

J'utilise généralement le modèle suivant si je veux faire sth. Une fois le formulaire complètement chargé:

public partial class BaseForm : Form 
{ 
    public event EventHandler Loaded; 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     Application.Idle += OnLoaded; 
    } 

    protected void OnLoaded(object sender, EventArgs e) 
    { 
     Application.Idle -= OnLoaded; 

     if (Loaded != null) 
     { 
      Loaded(sender, e); 
     } 
    } 
} 

Si je tire ma principale forme de BaseForm J'ai un événement Loaded qui, dans votre cas, j'utiliser comme suit.

static class Program 
{ 

    [STAThread] 
    static void Main() 
    { 
     var mainForm = new MainForm(); 
     mainForm.Loaded += (sender, e) => { new LoginDialog().ShowDialog(mainForm); }; 

     Application.Run(mainForm); 
    } 
}