Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

BOucle For each en vb

6 réponses
Avatar
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

6 réponses

Avatar
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






Avatar
Ornette
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" wrote in message
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








Avatar
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" wrote in message
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
>>
>>
>>
>>





Avatar
Patrice
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" a écrit dans le message de 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" wrote in message
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
>>
>>
>>
>>







Avatar
Ornette
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" wrote in message
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" wrote in message
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
>>
>>
>>
>>







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

EN tout cas merci des réponses

Jon


"alan" a écrit dans le message de 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