BOucle For each en vb

Le
JOnf
Salut à tous,

voilà mon problème :
j'ai une page web avec un certain nombre de textbox à remplir par
l'utilisateur.
Quand il clique sur suivant, pour passer à la page suivante, je veux d'abord
vérifier le contenu des textbox, et enlever, par exemple, toutes les
apostrophes et les remplacer par un espace.
J'aimerai trouver une solution qui m'évite d'écrire le code pour chaque
textbox.

j'ai donc essayé ceci : mais cela fonctionne que pour des windowsForm
mais pas dans des applications web.

Dim i As Control
For Each i In Me.Controls
If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")

Next

le système de débogage n'accepte pas le i.text mais alors comment faire ?

Connaissez-vous une solution pour que ce bout de code devienne valide dans
une application web ?

Merci beaucoup

JOnat
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
alan
Le #12188561
Dim i As Object 'Remplacement de control par object
For Each i In Me.Controls
If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text, "'", "
")
'Remplacement de i.Text par Ctype(i, TextBox).Text
Ceci devrait marcher. Salutations

"JOnf" a écrit :

Salut à tous,

voilà mon problème :
j'ai une page web avec un certain nombre de textbox à remplir par
l'utilisateur.
Quand il clique sur suivant, pour passer à la page suivante, je veux d'abord
vérifier le contenu des textbox, et enlever, par exemple, toutes les
apostrophes et les remplacer par un espace.
J'aimerai trouver une solution qui m'évite d'écrire le code pour chaque
textbox.

j'ai donc essayé ceci : mais cela fonctionne que pour des windowsForm
mais pas dans des applications web.

Dim i As Control
For Each i In Me.Controls
If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")

Next

le système de débogage n'accepte pas le i.text... mais alors comment faire ?

Connaissez-vous une solution pour que ce bout de code devienne valide dans
une application web ?

Merci beaucoup

JOnat






Ornette
Le #12188551
Bonjour,

je dirais que le foreach devrait être réccursif avec if control hascontrols
rappel de la procédure avec control.controls.
Sinon tu ne trouveras pas les controles imbriqués (par exemple, textbox dans
un panel, ou encore texobox dans un panel qui est dans un content page...)

Voici en pseudo language ce qu'il faut faire (désolé VB je galère...)

fonction ValidationCtrl (Controls ctrl)
pour tous les controles ct dans ctrl.controls
si ct.hascontrols
ValidationCtrl(ct.controls)
sinon
si ctrl.type = "System.......TextBox"
variable textbox = cast de ct en textbox
textbox.text.replace....
fin si
fin sinin
fin pour tout
fin fonction

En C# par exemple je fais ceci pour remettre tous les champs à zéro,
uniquement dans une zone de travail précise "MaZone" :

// remise à blanc de tous les champs
// cette procédure fonctionne de manière récursive
public static void ClearControls(ControlCollection ctrl)
{
foreach (Control ctl in ctrl)
{
if (ctl.HasControls())
{
ClearControls(ctl.Controls);
}
else
{
if (ctl.NamingContainer.ID == "MaZone")
{
switch (ctl.GetType().ToString())
{
case "System.Web.UI.WebControls.TextBox":
((TextBox)(ctl)).Text = "";
break;

case "System.Web.UI.WebControls.DropDownList":
((DropDownList)(ctl)).SelectedIndex = 0;
break;

case "System.Web.UI.WebControls.CheckBox":
((CheckBox)(ctl)).Checked = false;
break;
}
}
}
}
}



"alan" news:
Dim i As Object 'Remplacement de control par object
For Each i In Me.Controls
If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text, "'",
"
")
'Remplacement de i.Text par Ctype(i, TextBox).Text
Ceci devrait marcher. Salutations

"JOnf" a écrit :

Salut à tous,

voilà mon problème :
j'ai une page web avec un certain nombre de textbox à remplir par
l'utilisateur.
Quand il clique sur suivant, pour passer à la page suivante, je veux
d'abord
vérifier le contenu des textbox, et enlever, par exemple, toutes les
apostrophes et les remplacer par un espace.
J'aimerai trouver une solution qui m'évite d'écrire le code pour chaque
textbox.

j'ai donc essayé ceci : mais cela fonctionne que pour des windowsForm
mais pas dans des applications web.

Dim i As Control
For Each i In Me.Controls
If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")

Next

le système de débogage n'accepte pas le i.text... mais alors comment
faire ?

Connaissez-vous une solution pour que ce bout de code devienne valide
dans
une application web ?

Merci beaucoup

JOnat








alan
Le #12188521
Pourquoi faire simple, quand on peut faire compliqué...., hein?
Suis je bête, moi, de vouloir faire simple, alors que c'est tellement mieux
de chercher une solution bien compliquée, qui embrouille tout lol.



"Ornette" a écrit :

Bonjour,

je dirais que le foreach devrait être réccursif avec if control hascontrols
rappel de la procédure avec control.controls.
Sinon tu ne trouveras pas les controles imbriqués (par exemple, textbox dans
un panel, ou encore texobox dans un panel qui est dans un content page...)

Voici en pseudo language ce qu'il faut faire (désolé VB je galère...)

fonction ValidationCtrl (Controls ctrl)
pour tous les controles ct dans ctrl.controls
si ct.hascontrols
ValidationCtrl(ct.controls)
sinon
si ctrl.type = "System.......TextBox"
variable textbox = cast de ct en textbox
textbox.text.replace....
fin si
fin sinin
fin pour tout
fin fonction

En C# par exemple je fais ceci pour remettre tous les champs à zéro,
uniquement dans une zone de travail précise "MaZone" :

// remise à blanc de tous les champs
// cette procédure fonctionne de manière récursive
public static void ClearControls(ControlCollection ctrl)
{
foreach (Control ctl in ctrl)
{
if (ctl.HasControls())
{
ClearControls(ctl.Controls);
}
else
{
if (ctl.NamingContainer.ID == "MaZone")
{
switch (ctl.GetType().ToString())
{
case "System.Web.UI.WebControls.TextBox":
((TextBox)(ctl)).Text = "";
break;

case "System.Web.UI.WebControls.DropDownList":
((DropDownList)(ctl)).SelectedIndex = 0;
break;

case "System.Web.UI.WebControls.CheckBox":
((CheckBox)(ctl)).Checked = false;
break;
}
}
}
}
}



"alan" news:
> Dim i As Object 'Remplacement de control par object
> For Each i In Me.Controls
> If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text, "'",
> "
> ")
> 'Remplacement de i.Text par Ctype(i, TextBox).Text
> Ceci devrait marcher. Salutations
>
> "JOnf" a écrit :
>
>> Salut à tous,
>>
>> voilà mon problème :
>> j'ai une page web avec un certain nombre de textbox à remplir par
>> l'utilisateur.
>> Quand il clique sur suivant, pour passer à la page suivante, je veux
>> d'abord
>> vérifier le contenu des textbox, et enlever, par exemple, toutes les
>> apostrophes et les remplacer par un espace.
>> J'aimerai trouver une solution qui m'évite d'écrire le code pour chaque
>> textbox.
>>
>> j'ai donc essayé ceci : mais cela fonctionne que pour des windowsForm
>> mais pas dans des applications web.
>>
>> Dim i As Control
>> For Each i In Me.Controls
>> If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")
>>
>> Next
>>
>> le système de débogage n'accepte pas le i.text... mais alors comment
>> faire ?
>>
>> Connaissez-vous une solution pour que ce bout de code devienne valide
>> dans
>> une application web ?
>>
>> Merci beaucoup
>>
>> JOnat
>>
>>
>>
>>





Patrice
Le #12188511
Ou éventuellement notamment si les textbox sont fixes, une clause handles
concernant les multiples textbox ce qui évite à la fois "d'écrire plusieurs
fois la procédure" et une boucle peut-être pas totalement utile ;-)

"alan"
Pourquoi faire simple, quand on peut faire compliqué...., hein?
Suis je bête, moi, de vouloir faire simple, alors que c'est tellement
mieux
de chercher une solution bien compliquée, qui embrouille tout lol.



"Ornette" a écrit :

Bonjour,

je dirais que le foreach devrait être réccursif avec if control
hascontrols
rappel de la procédure avec control.controls.
Sinon tu ne trouveras pas les controles imbriqués (par exemple, textbox
dans
un panel, ou encore texobox dans un panel qui est dans un content
page...)

Voici en pseudo language ce qu'il faut faire (désolé VB je galère...)

fonction ValidationCtrl (Controls ctrl)
pour tous les controles ct dans ctrl.controls
si ct.hascontrols
ValidationCtrl(ct.controls)
sinon
si ctrl.type = "System.......TextBox"
variable textbox = cast de ct en textbox
textbox.text.replace....
fin si
fin sinin
fin pour tout
fin fonction

En C# par exemple je fais ceci pour remettre tous les champs à zéro,
uniquement dans une zone de travail précise "MaZone" :

// remise à blanc de tous les champs
// cette procédure fonctionne de manière récursive
public static void ClearControls(ControlCollection ctrl)
{
foreach (Control ctl in ctrl)
{
if (ctl.HasControls())
{
ClearControls(ctl.Controls);
}
else
{
if (ctl.NamingContainer.ID == "MaZone")
{
switch (ctl.GetType().ToString())
{
case "System.Web.UI.WebControls.TextBox":
((TextBox)(ctl)).Text = "";
break;

case
"System.Web.UI.WebControls.DropDownList":
((DropDownList)(ctl)).SelectedIndex = 0;
break;

case "System.Web.UI.WebControls.CheckBox":
((CheckBox)(ctl)).Checked = false;
break;
}
}
}
}
}



"alan" news:
> Dim i As Object 'Remplacement de control par object
> For Each i In Me.Controls
> If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text,
> "'",
> "
> ")
> 'Remplacement de i.Text par Ctype(i, TextBox).Text
> Ceci devrait marcher. Salutations
>
> "JOnf" a écrit :
>
>> Salut à tous,
>>
>> voilà mon problème :
>> j'ai une page web avec un certain nombre de textbox à remplir par
>> l'utilisateur.
>> Quand il clique sur suivant, pour passer à la page suivante, je veux
>> d'abord
>> vérifier le contenu des textbox, et enlever, par exemple, toutes les
>> apostrophes et les remplacer par un espace.
>> J'aimerai trouver une solution qui m'évite d'écrire le code pour
>> chaque
>> textbox.
>>
>> j'ai donc essayé ceci : mais cela fonctionne que pour des
>> windowsForm
>> mais pas dans des applications web.
>>
>> Dim i As Control
>> For Each i In Me.Controls
>> If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")
>>
>> Next
>>
>> le système de débogage n'accepte pas le i.text... mais alors comment
>> faire ?
>>
>> Connaissez-vous une solution pour que ce bout de code devienne valide
>> dans
>> une application web ?
>>
>> Merci beaucoup
>>
>> JOnat
>>
>>
>>
>>







Ornette
Le #12188491
Bonjour,

je suis pas tout à fait d'accord.

D'abord la récursivité n'est en rien compliquée, ensuite c'est le seul moyen
de trouver les controles quand il sont imbriqués.
Si on utilise un master page et des content page, c'est aussi le seul moyen
de les atteindre en passant Page.Controls.
Page.Controls ne contiendra jamais les textbox de la content page !! Il faut
chercher dans les controls enfants pour les trouver.

Cela dit si j'ai tout embrouillé, toutes mes excuses mais ce n'étais pas le
but !

Sachant que dans le FW 3.0 de microsoft tout les controles sont imbriqués
les uns dans les autres, c'est, à terme, à mon avis une approche à envisager
pour la recherche de controles.

D'autant qu'il suffit d'écrire une classe avec une fonction
FindControlsByType ou FindControlsByName et le tour est joué !! :-)

Ornette


"alan" news:
Pourquoi faire simple, quand on peut faire compliqué...., hein?
Suis je bête, moi, de vouloir faire simple, alors que c'est tellement
mieux
de chercher une solution bien compliquée, qui embrouille tout lol.



"Ornette" a écrit :

Bonjour,

je dirais que le foreach devrait être réccursif avec if control
hascontrols
rappel de la procédure avec control.controls.
Sinon tu ne trouveras pas les controles imbriqués (par exemple, textbox
dans
un panel, ou encore texobox dans un panel qui est dans un content
page...)

Voici en pseudo language ce qu'il faut faire (désolé VB je galère...)

fonction ValidationCtrl (Controls ctrl)
pour tous les controles ct dans ctrl.controls
si ct.hascontrols
ValidationCtrl(ct.controls)
sinon
si ctrl.type = "System.......TextBox"
variable textbox = cast de ct en textbox
textbox.text.replace....
fin si
fin sinin
fin pour tout
fin fonction

En C# par exemple je fais ceci pour remettre tous les champs à zéro,
uniquement dans une zone de travail précise "MaZone" :

// remise à blanc de tous les champs
// cette procédure fonctionne de manière récursive
public static void ClearControls(ControlCollection ctrl)
{
foreach (Control ctl in ctrl)
{
if (ctl.HasControls())
{
ClearControls(ctl.Controls);
}
else
{
if (ctl.NamingContainer.ID == "MaZone")
{
switch (ctl.GetType().ToString())
{
case "System.Web.UI.WebControls.TextBox":
((TextBox)(ctl)).Text = "";
break;

case
"System.Web.UI.WebControls.DropDownList":
((DropDownList)(ctl)).SelectedIndex = 0;
break;

case "System.Web.UI.WebControls.CheckBox":
((CheckBox)(ctl)).Checked = false;
break;
}
}
}
}
}



"alan" news:
> Dim i As Object 'Remplacement de control par object
> For Each i In Me.Controls
> If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text,
> "'",
> "
> ")
> 'Remplacement de i.Text par Ctype(i, TextBox).Text
> Ceci devrait marcher. Salutations
>
> "JOnf" a écrit :
>
>> Salut à tous,
>>
>> voilà mon problème :
>> j'ai une page web avec un certain nombre de textbox à remplir par
>> l'utilisateur.
>> Quand il clique sur suivant, pour passer à la page suivante, je veux
>> d'abord
>> vérifier le contenu des textbox, et enlever, par exemple, toutes les
>> apostrophes et les remplacer par un espace.
>> J'aimerai trouver une solution qui m'évite d'écrire le code pour
>> chaque
>> textbox.
>>
>> j'ai donc essayé ceci : mais cela fonctionne que pour des
>> windowsForm
>> mais pas dans des applications web.
>>
>> Dim i As Control
>> For Each i In Me.Controls
>> If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")
>>
>> Next
>>
>> le système de débogage n'accepte pas le i.text... mais alors comment
>> faire ?
>>
>> Connaissez-vous une solution pour que ce bout de code devienne valide
>> dans
>> une application web ?
>>
>> Merci beaucoup
>>
>> JOnat
>>
>>
>>
>>







JOnf
Le #12188401
Ok, merci Beaucoup, je vais tester cela...
Je n'ai pas encore pu le faire...

EN tout cas merci des réponses

Jon


"alan"
Dim i As Object 'Remplacement de control par object
For Each i In Me.Controls
If TypeOf i Is TextBox Then ctype( i, TextBox).text = Replace(i.Text, "'",
"
")
'Remplacement de i.Text par Ctype(i, TextBox).Text
Ceci devrait marcher. Salutations

"JOnf" a écrit :

Salut à tous,

voilà mon problème :
j'ai une page web avec un certain nombre de textbox à remplir par
l'utilisateur.
Quand il clique sur suivant, pour passer à la page suivante, je veux
d'abord
vérifier le contenu des textbox, et enlever, par exemple, toutes les
apostrophes et les remplacer par un espace.
J'aimerai trouver une solution qui m'évite d'écrire le code pour chaque
textbox.

j'ai donc essayé ceci : mais cela fonctionne que pour des windowsForm
mais pas dans des applications web.

Dim i As Control
For Each i In Me.Controls
If TypeOf i Is TextBox Then i.text = Replace(i.Text, "'", " ")

Next

le système de débogage n'accepte pas le i.text... mais alors comment
faire ?

Connaissez-vous une solution pour que ce bout de code devienne valide
dans
une application web ?

Merci beaucoup

JOnat








Publicité
Poster une réponse
Anonyme