Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 2007
-
8 juin 2006 à 11:26
Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 2007
-
9 juin 2006 à 12:01
Bonjour voila encore une question sur les types
J'ai réussi à lister tous mes controls, à prendre le type Control comme base pour n'importe quel type.Label ou Bouton
mais maintenant jaimerais une solution pour caster automatiquement suivant le type du Control
Voila ma fonction :
public System.Web.UI.Control ValueOf(String it,ref System.Web.UI.Control Lab)
{
String tmp=ValueOf(it);
if (tmp!="null")
{
if (Lab is Label) ((Label)Lab).Text=tmp;
if (Lab is Button) ((Button)Lab).Text=tmp;
if (Lab is RequiredFieldValidator) ((RequiredFieldValidator)Lab).Text=tmp;
}
return Lab;
}
que jaimerais changer en :
public System.Web.UI.Control ValueOf(String it,ref System.Web.UI.Control Lab)
{
String tmp=ValueOf(it);
if (tmp!="null")
{
((Lab.GetType())Lab).Text=tmp; // pour caster n'importe quel Control automatiquement
}
return Lab;
}
GetType me renvoie bien le type du control mais le problème est que le castage ne prend pas le type Type dans les parenthèse, d'ailleur je ne sais meme pas quel est le type de la variable dans les ( )
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 juin 2006 à 13:51
Bonjour,
Si tu veux vraiment faire ca, renseigne toi au niveau de la reflection et des méthodes SetProperty/GetProperty voici le code pour faire ce genre de choses
Personne p =
new
Personne();
Type t = p.GetType();
if (t.GetProperty(
"Name") !=
null)
{
PropertyInfo prop = t.GetProperty(
"Name");
if (prop.CanWrite)
prop.SetValue(p,
"DURAND",
null);
}
Console.WriteLine(p.Name);
pour la deuxieme question je te conseil de revoir l'héritage ... car je ne comprend vraiment pas la question, si ton objet hérite de objectbase alors objectbase possede toutes les propriétés publics (sauf cas particulier)
Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 20072 8 juin 2006 à 11:55
Pendant que je suis dans les questions...
On fait commen pour passer directement d'un Label (par exemple) à son type Control
Comme ca je pourais utiliser cette fonction directement en passant également un Label
Parce que j'ai essayé
Label Labb1;
ValueOf("aaa",ref (Control)Labb1);
mais il me fait une erreur...
Alors j'aimerai savoir si il y a une fonction qui retourne le control
Pareil j'aimerai ne pas etre obliger de passer par un control temporaire...
Genre :
Control tmp;
tmp=(Control)Labb1;
ValueOf("aaa",ref tmp);
Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 20072 8 juin 2006 à 17:53
salut
merci davoir repondu
pour la première question je vais i réfléchir demain mais pour la 2eme, je connais les héritages et tt ce ki est derriere, c'est pour ca également que j'avait fait un exemple en dessous.
mais le petit plus par rapport a d'habitude est le passage par référence ( ref )qui n'accepte pas...et je ne comprend pas pourquoi...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 juin 2006 à 20:33
Je ne comprend pas trés bien pourquoi tu veux mettre ref ? perso j'ai du l'utiliser ou une deux fois puisque la plupart des types sont des types par référence. par exemple ce code
Personne p = new Personne();
toto(p);
console.writeLine(p.firstName); // retournera bien Cyril !
public void toto(Personne p)
{
p.firstName = "Cyril";
}
Pour ce que j'avais pas compris peut etre que j'ai mal interpreté les choses "Alors j'aimerai savoir si il y a une fonction qui retourne le control" tu voulais savoir comment retourner le control par reference (ce que j'explique plus haut) et non pas une fonction de l'objet TextBox qui retournerais l'objet Control ?
Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 20072 9 juin 2006 à 11:50
ouuuuuiiiiiiiinnnnnnnnnnnn!!!!!!!!!!!!!!!
Mais C'est pas possible de perdre autant de temps comme ca!!!
Bon ben désolé pour le dérangement...mais bon je suis encore accrocher fortement au C++ donc forcement les passages par référence par défaut....j'ai connu ca que en VB et je suis pas trop fan...
Maintenant je le serait
En plus jvien de voir que j'ai pas du tt besoin de le caster dans ma fonction "(Control)Label1" il le fait automatiquement
Merci de m'avoir éclaicit sur ce point, je crois que j'ai gagné ma journé...
Mais alors...il sert a quoi le "ref"???!!! A poser des problèmes inutiles?
Et je viens d'essayer les Reflection à l'instant...pendant que je fait le post
je connaissais pas du tout, c'est super comme truc, on peut aller rechercher l'objet et ses méthodes à l'arrache comme ca, ca assure!
Et comme je liste tout mes control ben si il a pas la propriété ca renvoie null directe, ca évite les erreurs c'est bien foutu!
Par contre...j'avait un vieux bug incompréhensible quand je les utilisais...
Il m'écrivait en haut de page la premiere valeur qu'il trouvait quand je voulait assigner...mais c'est vrai que je liste TOUT les controls de la page donc forcement dedans yavait également les LiteralControl qui on la propriété Text propre à la page
Juste un if bien placé et c'est reparti
D'ailleur j'ai intéret à faire attention à ca dans les autres pages au cas ou...
C'est vraiment nikel, c'est exactement ce que je voulait!
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 9 juin 2006 à 11:54
Ben tu peux trés bien vérifier que le type du control soit un button ou un literal ...
toutes les propriétés ne sont pas des variables par référence les structures ainsi que les types primitifs sont passé par valeur (int, string, ...) voila à quoi sert ref :)
Coolpix08
Messages postés150Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention21 décembre 20072 9 juin 2006 à 12:01
Ouais c'est ce que je faisais avec "IS" mais justement je voulait éviter de passer par lui avec tout les types différent de control donc maintenant ca
Ah oki!!! Donc en faite j'étais quand meme dans le vrai. Ils ont gardé la méthode du C++ sauf pour les autres types.
Ben voila, j'y voit plus clair maintenant.
Ca ce trouve tu vient encore de m'éviter 1heure de Google dans le futur...