Cependant est-ce que cette fenêtre doit être modale ? Ou non-modale comme vous l'avez-bien fait avec Show()...
Pourrait être les 2, je vais voir comment gérer cela. Par contre j'au aussi la syntaxe ci-dessous:
Form myForm = (Form)Activator.CreateInstance(typeof(fParam));
Quelle différence entre passer par Activator ou par New ?
Merci
--
-------------------------- Merci Sylfelin
Gilles TOURREAU
Le Thu, 27 Sep 2007 16:24:55 +0200, Sylfelin a écrit:
Techniquement c'est correct !
Cependant est-ce que cette fenêtre doit être modale ? Ou non-modale comme vous l'avez-bien fait avec Show()...
Pourrait être les 2, je vais voir comment gérer cela. Par contre j'au aussi la syntaxe ci-dessous:
Form myForm = (Form)Activator.CreateInstance(typeof(fParam));
Quelle différence entre passer par Activator ou par New ?
Merci
Activor permet de créer une fenêtre en connaissant son type à l'execution...
Type t;
if (UtilisateurChoisiForm1 == true) t = typeof(Form1); else if (UtilisateurChoisiForm2 == true) t = typeof(Form2); else t = typeof(AutreForm);
Form myForm = (Form)Activator.CreateInstance(t); myForm.Show();
Cette exemple est simple et peut-être "plus générique" en proposant par exemple à l'utilisateur, une liste de différentes Form à ouvrir...
Cependant avec Activator, vous perdez en contrôle de type des paramètres du constructeur de votre Form... Exemple :
Si MaForm contient un constructeur :
public MaForm(int nombre, string s) { ... }
Si vous faites : MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[] { 1664, "Bonjour"} ); //(Je suis pas sûr du prototype de la méthode...)
Cela compile sans problème, et fonctionne à l'execution...
Tandis que :
MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[] { "Bonjour", new object() } );
Cela compile sans problème, mais à l'execution vous aurez une exception...
Si vous utilisez new MaForm("Bonjour", new object()) , vous aurez un message d'insulte du compilateur vous indiquant que votre code n'est pas correct...
Autre erreur possible :
MaForm f = (MaForm)Activator.CreateInstance(typeof(UneAutreForm));
Cela compile sans problème, mais à l'execution => Exception
La morale de l'histoire : Typez au maximum votre code en utilisant si possible (dans ce cas) le code suivant : new MaForm(....) Utilisez uniquement Activator, si vous ne savez pas à l'avance quel Form va être affichée...
********************
Si vous utilisez des fenêtres modales préférez l'utilisation de ce genre de code :
using (MaForm f = new MaForm()) { f.ShowDialog(); }
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Le Thu, 27 Sep 2007 16:24:55 +0200, Sylfelin
<sylfelin_EN_TROP_@cegetel.net> a écrit:
Techniquement c'est correct !
Cependant est-ce que cette fenêtre doit être modale ? Ou non-modale
comme vous l'avez-bien fait avec Show()...
Pourrait être les 2, je vais voir comment gérer cela. Par contre j'au
aussi la syntaxe ci-dessous:
Form myForm = (Form)Activator.CreateInstance(typeof(fParam));
Quelle différence entre passer par Activator ou par New ?
Merci
Activor permet de créer une fenêtre en connaissant son type à
l'execution...
Type t;
if (UtilisateurChoisiForm1 == true)
t = typeof(Form1);
else if (UtilisateurChoisiForm2 == true)
t = typeof(Form2);
else
t = typeof(AutreForm);
Form myForm = (Form)Activator.CreateInstance(t);
myForm.Show();
Cette exemple est simple et peut-être "plus générique" en proposant par
exemple à l'utilisateur, une liste de différentes Form à ouvrir...
Cependant avec Activator, vous perdez en contrôle de type des paramètres
du constructeur de votre Form...
Exemple :
Si MaForm contient un constructeur :
public MaForm(int nombre, string s)
{
...
}
Si vous faites :
MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[]
{ 1664, "Bonjour"} ); //(Je suis pas sûr du prototype de la méthode...)
Cela compile sans problème, et fonctionne à l'execution...
Tandis que :
MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[]
{ "Bonjour", new object() } );
Cela compile sans problème, mais à l'execution vous aurez une exception...
Si vous utilisez new MaForm("Bonjour", new object()) , vous aurez un
message d'insulte du compilateur vous indiquant que votre code n'est pas
correct...
Autre erreur possible :
MaForm f = (MaForm)Activator.CreateInstance(typeof(UneAutreForm));
Cela compile sans problème, mais à l'execution => Exception
La morale de l'histoire :
Typez au maximum votre code en utilisant si possible (dans ce cas) le code
suivant : new MaForm(....)
Utilisez uniquement Activator, si vous ne savez pas à l'avance quel Form
va être affichée...
********************
Si vous utilisez des fenêtres modales préférez l'utilisation de ce genre
de code :
using (MaForm f = new MaForm())
{
f.ShowDialog();
}
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Thu, 27 Sep 2007 16:24:55 +0200, Sylfelin a écrit:
Techniquement c'est correct !
Cependant est-ce que cette fenêtre doit être modale ? Ou non-modale comme vous l'avez-bien fait avec Show()...
Pourrait être les 2, je vais voir comment gérer cela. Par contre j'au aussi la syntaxe ci-dessous:
Form myForm = (Form)Activator.CreateInstance(typeof(fParam));
Quelle différence entre passer par Activator ou par New ?
Merci
Activor permet de créer une fenêtre en connaissant son type à l'execution...
Type t;
if (UtilisateurChoisiForm1 == true) t = typeof(Form1); else if (UtilisateurChoisiForm2 == true) t = typeof(Form2); else t = typeof(AutreForm);
Form myForm = (Form)Activator.CreateInstance(t); myForm.Show();
Cette exemple est simple et peut-être "plus générique" en proposant par exemple à l'utilisateur, une liste de différentes Form à ouvrir...
Cependant avec Activator, vous perdez en contrôle de type des paramètres du constructeur de votre Form... Exemple :
Si MaForm contient un constructeur :
public MaForm(int nombre, string s) { ... }
Si vous faites : MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[] { 1664, "Bonjour"} ); //(Je suis pas sûr du prototype de la méthode...)
Cela compile sans problème, et fonctionne à l'execution...
Tandis que :
MaForm f = (MaForm)Activator.CreateInstance(typeof(MaForm), new object[] { "Bonjour", new object() } );
Cela compile sans problème, mais à l'execution vous aurez une exception...
Si vous utilisez new MaForm("Bonjour", new object()) , vous aurez un message d'insulte du compilateur vous indiquant que votre code n'est pas correct...
Autre erreur possible :
MaForm f = (MaForm)Activator.CreateInstance(typeof(UneAutreForm));
Cela compile sans problème, mais à l'execution => Exception
La morale de l'histoire : Typez au maximum votre code en utilisant si possible (dans ce cas) le code suivant : new MaForm(....) Utilisez uniquement Activator, si vous ne savez pas à l'avance quel Form va être affichée...
********************
Si vous utilisez des fenêtres modales préférez l'utilisation de ce genre de code :
using (MaForm f = new MaForm()) { f.ShowDialog(); }
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr