J'essaye de r=E9cup=E9rer les valeurs utilisateur d'un ensemble de contro=
les.
Suivant le type des controles je vais devoir lire la propri=E9t=E9 Text p=
our les TextBox ou Value pour les NumericUpDown.
Alors j'essaye de la fa=E7on suivante, mais =E7a ne fonctionne pas ...
foreach( Control c in this.Controls )
{
string v ;
System.Type t =3D c.GetType();
// r=E9cup de 'Text'
System.Reflection.PropertyInfo pi =3D t.GetProperty( "Text" );
if( pi =3D=3D null )
{
// Si pas de Text, alors essaye 'Value'
pi =3D t.GetProperty( "Value" );
}
if( pi !=3D null )
{
// cette ligne donne l'erreur :
// Une exception non g=E9r=E9e du type 'System.Reflection.TargetExcepti=
on' s'est produite dans mscorlib.dll
// Informations suppl=E9mentaires : Une m=E9thode non static requiert u=
ne cible.
//
Debug.WriteLine( pi.GetValue(null,null) );
}
}
Auriez vous une id=E9e de ce qui ne va pas dans ce code ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zazar
Bonjour,
J'essaye de récupérer les valeurs utilisateur d'un ensemble de controles. Suivant le type des controles je vais devoir lire la propriété Text pour les TextBox ou Value pour les >NumericUpDown. Alors j'essaye de la façon suivante, mais ça ne fonctionne pas ...
foreach( Control c in this.Controls ) { string v ; System.Type t = c.GetType(); // récup de 'Text' System.Reflection.PropertyInfo pi = t.GetProperty( "Text" ); if( pi == null ) { // Si pas de Text, alors essaye 'Value' pi = t.GetProperty( "Value" ); } if( pi != null ) { // cette ligne donne l'erreur : // Une exception non gérée du type 'System.Reflection.TargetException' s'est produite dans mscorlib.dll // Informations supplémentaires : Une méthode non static requiert une cible. // Debug.WriteLine( pi.GetValue(null,null) ); } }
Auriez vous une idée de ce qui ne va pas dans ce code ?
La méthode GetValue est, comme le précise l'erreur, non statique. Ca signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui passer null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire myTextBox.Text (en supposant que myTextBox soit une variable de type TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode. Sinon une autre façon de faire serait de tester le type de c: TextBox myTextbox = c as TextBox; if (myTextBox != null) { Debug.WriteLine(myTextBox.Text); } NumericUpDown my numericUpDown = c as NumericUpDown; if (myNumericUpDown != null) { ... }
-- Zazar
Bonjour,
J'essaye de récupérer les valeurs utilisateur d'un ensemble de controles.
Suivant le type des controles je vais devoir lire la propriété Text pour
les TextBox ou Value pour les >NumericUpDown.
Alors j'essaye de la façon suivante, mais ça ne fonctionne pas ...
foreach( Control c in this.Controls )
{
string v ;
System.Type t = c.GetType();
// récup de 'Text'
System.Reflection.PropertyInfo pi = t.GetProperty( "Text" );
if( pi == null )
{
// Si pas de Text, alors essaye 'Value'
pi = t.GetProperty( "Value" );
}
if( pi != null )
{
// cette ligne donne l'erreur :
// Une exception non gérée du type 'System.Reflection.TargetException'
s'est produite dans mscorlib.dll
// Informations supplémentaires : Une méthode non static requiert une
cible.
//
Debug.WriteLine( pi.GetValue(null,null) );
}
}
Auriez vous une idée de ce qui ne va pas dans ce code ?
La méthode GetValue est, comme le précise l'erreur, non statique. Ca
signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui passer
null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire
myTextBox.Text (en supposant que myTextBox soit une variable de type
TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode.
Sinon une autre façon de faire serait de tester le type de c:
TextBox myTextbox = c as TextBox;
if (myTextBox != null) {
Debug.WriteLine(myTextBox.Text);
}
NumericUpDown my numericUpDown = c as NumericUpDown;
if (myNumericUpDown != null) {
...
}
J'essaye de récupérer les valeurs utilisateur d'un ensemble de controles. Suivant le type des controles je vais devoir lire la propriété Text pour les TextBox ou Value pour les >NumericUpDown. Alors j'essaye de la façon suivante, mais ça ne fonctionne pas ...
foreach( Control c in this.Controls ) { string v ; System.Type t = c.GetType(); // récup de 'Text' System.Reflection.PropertyInfo pi = t.GetProperty( "Text" ); if( pi == null ) { // Si pas de Text, alors essaye 'Value' pi = t.GetProperty( "Value" ); } if( pi != null ) { // cette ligne donne l'erreur : // Une exception non gérée du type 'System.Reflection.TargetException' s'est produite dans mscorlib.dll // Informations supplémentaires : Une méthode non static requiert une cible. // Debug.WriteLine( pi.GetValue(null,null) ); } }
Auriez vous une idée de ce qui ne va pas dans ce code ?
La méthode GetValue est, comme le précise l'erreur, non statique. Ca signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui passer null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire myTextBox.Text (en supposant que myTextBox soit une variable de type TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode. Sinon une autre façon de faire serait de tester le type de c: TextBox myTextbox = c as TextBox; if (myTextBox != null) { Debug.WriteLine(myTextBox.Text); } NumericUpDown my numericUpDown = c as NumericUpDown; if (myNumericUpDown != null) { ... }
-- Zazar
cyrille
Zazar wrote:
La méthode GetValue est, comme le précise l'erreur, non statique. C a signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui pa sser null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire myTextBox.Text (en supposant que myTextBox soit une variable de type TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode.
Merci , ça fonctionne :
System.Type t = c2.GetType(); System.Reflection.PropertyInfo pi ; pi = t.GetProperty( "Text" ); if( pi == null ) { pi = t.GetProperty( "Value" ); } if( pi != null ) { Debug.WriteLine( pi.GetValue( c2,null) ); }
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
cyrille
Zazar wrote:
La méthode GetValue est, comme le précise l'erreur, non statique. C a
signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui pa sser
null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire
myTextBox.Text (en supposant que myTextBox soit une variable de type
TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode.
Merci , ça fonctionne :
System.Type t = c2.GetType();
System.Reflection.PropertyInfo pi ;
pi = t.GetProperty( "Text" );
if( pi == null )
{
pi = t.GetProperty( "Value" );
}
if( pi != null )
{
Debug.WriteLine( pi.GetValue( c2,null) );
}
par contre, je me demande pourquoi
il faut d'abord créer la PropertyInfo à partir du contrôle
pour ensuite faire appel à la méthode PropertyInfo.GetValue()
en repassant une nouvelle fois la réf au controle ?
La méthode GetValue est, comme le précise l'erreur, non statique. C a signifie qu'il lui faut un objet sur lequel s'appliquer. Si vous lui pa sser null, c'est un peu comme si vous faisiez TextBox.Text au lieu de faire myTextBox.Text (en supposant que myTextBox soit une variable de type TextBox). Pour corriger ça, passez votre objet c en paramètre de la méthode.
Merci , ça fonctionne :
System.Type t = c2.GetType(); System.Reflection.PropertyInfo pi ; pi = t.GetProperty( "Text" ); if( pi == null ) { pi = t.GetProperty( "Value" ); } if( pi != null ) { Debug.WriteLine( pi.GetValue( c2,null) ); }
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
cyrille
Zazar
> par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du contrôle, mais à partir de son type.
-- Zazar
> par contre, je me demande pourquoi
il faut d'abord créer la PropertyInfo à partir du contrôle
pour ensuite faire appel à la méthode PropertyInfo.GetValue()
en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du
contrôle, mais à partir de son type.
> par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du contrôle, mais à partir de son type.
-- Zazar
cyrille
Zazar wrote:
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à part ir du contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o) bonne journée, cyrille
Zazar wrote:
par contre, je me demande pourquoi
il faut d'abord créer la PropertyInfo à partir du contrôle
pour ensuite faire appel à la méthode PropertyInfo.GetValue()
en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à part ir du
contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o)
bonne journée,
cyrille
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à part ir du contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o) bonne journée, cyrille
Mitsuru FURUTA [Ms]
Bonjour à tous,
J'ajoute un tout petit grain de sel :-).
La solution "PorpertyInfo" est certes plus universelle mais moins objet et surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) { ((TextBox) c).Text = ... } if (c is NumericUpDown) { ((NumericUpDown) c).Value = ... }
Bonne continuation,
Mitsuru FURUTA [Microsoft FRANCE]
"cyrille" wrote in message news: Zazar wrote:
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o) bonne journée, cyrille
Bonjour à tous,
J'ajoute un tout petit grain de sel :-).
La solution "PorpertyInfo" est certes plus universelle mais moins objet et
surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) {
((TextBox) c).Text = ...
}
if (c is NumericUpDown) {
((NumericUpDown) c).Value = ...
}
Bonne continuation,
Mitsuru FURUTA [Microsoft FRANCE]
"cyrille" <cyrilleml@kbuilder.net> wrote in message
news:eEMAo950EHA.2624@TK2MSFTNGP11.phx.gbl...
Zazar wrote:
par contre, je me demande pourquoi
il faut d'abord créer la PropertyInfo à partir du contrôle
pour ensuite faire appel à la méthode PropertyInfo.GetValue()
en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du
contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o)
bonne journée,
cyrille
La solution "PorpertyInfo" est certes plus universelle mais moins objet et surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) { ((TextBox) c).Text = ... } if (c is NumericUpDown) { ((NumericUpDown) c).Value = ... }
Bonne continuation,
Mitsuru FURUTA [Microsoft FRANCE]
"cyrille" wrote in message news: Zazar wrote:
par contre, je me demande pourquoi il faut d'abord créer la PropertyInfo à partir du contrôle pour ensuite faire appel à la méthode PropertyInfo.GetValue() en repassant une nouvelle fois la réf au controle ?
Regardez bien votre code : la PropertyInfo n'est pas créée à partir du contrôle, mais à partir de son type.
Merci beaucoup pour votre clairvoyance ;o) bonne journée, cyrille
cyrille
In article , says...
La solution "PorpertyInfo" est certes plus universelle mais moins objet e t surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) { ((TextBox) c).Text = ... } if (c is NumericUpDown) { ((NumericUpDown) c).Value = ... }
Merci Mitsuru pour ce bon grain :-)
Mais avec cette solution il faut expliciter tous les types de contrôles, alors qu'avec PropertyInfo("Text") et ("Value") on touche un maximum de contrôles ... Même ceux dont on ne connait pas le type.
cyrille
In article <e7P5akV1EHA.2540@TK2MSFTNGP09.phx.gbl>, mitsufu@microsoft.com
says...
La solution "PorpertyInfo" est certes plus universelle mais moins objet e t
surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) {
((TextBox) c).Text = ...
}
if (c is NumericUpDown) {
((NumericUpDown) c).Value = ...
}
Merci Mitsuru pour ce bon grain :-)
Mais avec cette solution il faut expliciter tous les types de contrôles,
alors qu'avec PropertyInfo("Text") et ("Value") on touche un maximum de
contrôles ... Même ceux dont on ne connait pas le type.
La solution "PorpertyInfo" est certes plus universelle mais moins objet e t surtout plus lente que de tester le type.
Dans la boucle For, tu peux tester:
if (c is TextBox) { ((TextBox) c).Text = ... } if (c is NumericUpDown) { ((NumericUpDown) c).Value = ... }
Merci Mitsuru pour ce bon grain :-)
Mais avec cette solution il faut expliciter tous les types de contrôles, alors qu'avec PropertyInfo("Text") et ("Value") on touche un maximum de contrôles ... Même ceux dont on ne connait pas le type.