Castage Automatique??? [Résolu]

Signaler
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
-
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
-
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 ( )

Si quelqu'un a une idé, il serait le bien venu!

7 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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)

<hr />Cyril - MVS - MCP
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
2
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);

...
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
2
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...

Il suffit de coder pour le voir.

Merci pour la premiere solution!

Je vois ca demain pour le reste
Bonne soiré
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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 ?

<hr />Cyril - MVS - MCP
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
2
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!

Je te remercie beaucoup!!!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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 :)

ref >> http://msdn2.microsoft.com/en-us/library/14akc2c7.aspx 

<hr />Cyril - MVS - MCP
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
2
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...

RererereMerci!

On se voit surement au prochain post! LOL!