Definir l'affichage des controles programmatiquement
3 réponses
Michel Couche
Bonjour !
Je développe un module de librairie en ligne pour un intranet.
Certains controles (créer ou supprimer des directory, renommer des
fichiers, ...) ne peuvent être utilisés que par les "administrateurs".
J'ai pensé donner le préfixe "admin_" à ces controles et les afficher
programmatiquement par une méthode comme ci-dessous ....
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
....
Call SetUpVisibility_AdminControls(False)
...
End sub
...
...
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean)
Dim obj_Control As Control
For Each obj_Control In Page.Controls
If Left(obj_Control.ID, 6) = "admin_" Then
Page.FindControl(obj_Control.ID)
obj_Control.Visible = Adminlevel
End If
Next
End Sub
Pour une raison que (bien évidement) j'ignore, les controles s'affichent
quelle que soit la valeur du booléen Adminlevel.
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
Patrice
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais exécuté...
Si les contrôles sont statiques, je les accéderai directement par la variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) admin_A.VisibleminLevel admin_B.VisibleminLevel admin_C.VisibleminLevel End Sub
Patrice
--
"Michel Couche" a écrit dans le message de news:
Bonjour !
Je développe un module de librairie en ligne pour un intranet.
Certains controles (créer ou supprimer des directory, renommer des fichiers, ...) ne peuvent être utilisés que par les "administrateurs".
J'ai pensé donner le préfixe "admin_" à ces controles et les afficher programmatiquement par une méthode comme ci-dessous ....
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load .... Call SetUpVisibility_AdminControls(False) ... End sub
... ... Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) Dim obj_Control As Control For Each obj_Control In Page.Controls If Left(obj_Control.ID, 6) = "admin_" Then Page.FindControl(obj_Control.ID) obj_Control.Visible = Adminlevel End If Next End Sub
Pour une raison que (bien évidement) j'ignore, les controles s'affichent quelle que soit la valeur du booléen Adminlevel.
Merci d'avance pour un petit coup de main !
Michel
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code
parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais
exécuté...
Si les contrôles sont statiques, je les accéderai directement par la
variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean)
admin_A.VisibleminLevel
admin_B.VisibleminLevel
admin_C.VisibleminLevel
End Sub
Patrice
--
"Michel Couche" <Michel.couche_REMOVE_@euronet.be> a écrit dans le message
de news:eIacO8QXEHA.3972@TK2MSFTNGP12.phx.gbl...
Bonjour !
Je développe un module de librairie en ligne pour un intranet.
Certains controles (créer ou supprimer des directory, renommer des
fichiers, ...) ne peuvent être utilisés que par les "administrateurs".
J'ai pensé donner le préfixe "admin_" à ces controles et les afficher
programmatiquement par une méthode comme ci-dessous ....
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
....
Call SetUpVisibility_AdminControls(False)
...
End sub
...
...
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean)
Dim obj_Control As Control
For Each obj_Control In Page.Controls
If Left(obj_Control.ID, 6) = "admin_" Then
Page.FindControl(obj_Control.ID)
obj_Control.Visible = Adminlevel
End If
Next
End Sub
Pour une raison que (bien évidement) j'ignore, les controles s'affichent
quelle que soit la valeur du booléen Adminlevel.
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais exécuté...
Si les contrôles sont statiques, je les accéderai directement par la variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) admin_A.VisibleminLevel admin_B.VisibleminLevel admin_C.VisibleminLevel End Sub
Patrice
--
"Michel Couche" a écrit dans le message de news:
Bonjour !
Je développe un module de librairie en ligne pour un intranet.
Certains controles (créer ou supprimer des directory, renommer des fichiers, ...) ne peuvent être utilisés que par les "administrateurs".
J'ai pensé donner le préfixe "admin_" à ces controles et les afficher programmatiquement par une méthode comme ci-dessous ....
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load .... Call SetUpVisibility_AdminControls(False) ... End sub
... ... Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) Dim obj_Control As Control For Each obj_Control In Page.Controls If Left(obj_Control.ID, 6) = "admin_" Then Page.FindControl(obj_Control.ID) obj_Control.Visible = Adminlevel End If Next End Sub
Pour une raison que (bien évidement) j'ignore, les controles s'affichent quelle que soit la valeur du booléen Adminlevel.
Merci d'avance pour un petit coup de main !
Michel
Michel Couche
Patrice wrote:
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais exécuté...
Si les contrôles sont statiques, je les accéderai directement par la variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) admin_A.VisibleminLevel admin_B.VisibleminLevel admin_C.VisibleminLevel End Sub
Patrice
Patrice, Merci pour ta réponse. J'ai vérifié que le code "if left ..." est bien exécuté. Après avoir fait un tour sur Google, il semble que mon cas ne soit pas isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela fonctionne mais j'aurais voulu une solution plus souple que je ne devais pas adapter en cas d'ajout/suppression de controles. Bonne fin de journée, Michel
Patrice wrote:
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code
parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais
exécuté...
Si les contrôles sont statiques, je les accéderai directement par la
variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean)
admin_A.VisibleminLevel
admin_B.VisibleminLevel
admin_C.VisibleminLevel
End Sub
Patrice
Patrice,
Merci pour ta réponse.
J'ai vérifié que le code "if left ..." est bien exécuté.
Après avoir fait un tour sur Google, il semble que mon cas ne soit pas
isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela
fonctionne mais j'aurais voulu une solution plus souple que je ne devais
pas adapter en cas d'ajout/suppression de controles.
Bonne fin de journée,
Michel
Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le code parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais exécuté...
Si les contrôles sont statiques, je les accéderai directement par la variable correspondante :
Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) admin_A.VisibleminLevel admin_B.VisibleminLevel admin_C.VisibleminLevel End Sub
Patrice
Patrice, Merci pour ta réponse. J'ai vérifié que le code "if left ..." est bien exécuté. Après avoir fait un tour sur Google, il semble que mon cas ne soit pas isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela fonctionne mais j'aurais voulu une solution plus souple que je ne devais pas adapter en cas d'ajout/suppression de controles. Bonne fin de journée, Michel
Patrice
Peux tu confirmer que Visible est bien True pour tes contrôles lorsque ton traitement se termine ?
Pour moi, ton code me semble : - parcourir les contrôles de niveau 1 (essentiellement litéral de début, balise form puis litéraux de fin) - si un contrôle de niveau 1 commence par admin, on cherche un contrôle de même nom dont l'on modifie la propriété visible ???
Je ferais plutôt quelque chose comme :
SetAdmin(ByVal RootControl As Control,ByVal IsVisible As Boolean) For Each Control In RootControl.Controls If Control.ID.StartsWith("admin_") Then Control.Visible=IsVisible) If Control.Visible Then SetAdmin(Control,IsVisible) Next End Sub
A appeler dans le load par :
For Each Control in Page.Controls SetAdmin Control,True Next
Le principe est parcourir tous les contrôles : - si le contrôle commence par admin il est caché - si le contrôle n'est pas caché, on parcours également tous ses contrôles enfants
Le but est de trouver les contrôles admin_ même si ils sont plus bas dans la hiérarchie. je crois que tu ne descends pas assez pour l'instant.
Patrice
--
"Michel Couche" a écrit dans le message de news:
Patrice wrote:
> Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le
code
> parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais > exécuté... > > Si les contrôles sont statiques, je les accéderai directement par la > variable correspondante : > > Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) > admin_A.VisibleminLevel > admin_B.VisibleminLevel > admin_C.VisibleminLevel > End Sub > > Patrice >
Patrice, Merci pour ta réponse. J'ai vérifié que le code "if left ..." est bien exécuté. Après avoir fait un tour sur Google, il semble que mon cas ne soit pas isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela fonctionne mais j'aurais voulu une solution plus souple que je ne devais pas adapter en cas d'ajout/suppression de controles. Bonne fin de journée, Michel
Peux tu confirmer que Visible est bien True pour tes contrôles lorsque ton
traitement se termine ?
Pour moi, ton code me semble :
- parcourir les contrôles de niveau 1 (essentiellement litéral de début,
balise form puis litéraux de fin)
- si un contrôle de niveau 1 commence par admin, on cherche un contrôle de
même nom dont l'on modifie la propriété visible ???
Je ferais plutôt quelque chose comme :
SetAdmin(ByVal RootControl As Control,ByVal IsVisible As Boolean)
For Each Control In RootControl.Controls
If Control.ID.StartsWith("admin_") Then Control.Visible=IsVisible)
If Control.Visible Then SetAdmin(Control,IsVisible)
Next
End Sub
A appeler dans le load par :
For Each Control in Page.Controls
SetAdmin Control,True
Next
Le principe est parcourir tous les contrôles :
- si le contrôle commence par admin il est caché
- si le contrôle n'est pas caché, on parcours également tous ses
contrôles enfants
Le but est de trouver les contrôles admin_ même si ils sont plus bas dans la
hiérarchie. je crois que tu ne descends pas assez pour l'instant.
Patrice
--
"Michel Couche" <Michel.couche_REMOVE_@euronet.be> a écrit dans le message
de news:On4Hx3RXEHA.748@TK2MSFTNGP11.phx.gbl...
Patrice wrote:
> Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le
code
> parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais
> exécuté...
>
> Si les contrôles sont statiques, je les accéderai directement par la
> variable correspondante :
>
> Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean)
> admin_A.VisibleminLevel
> admin_B.VisibleminLevel
> admin_C.VisibleminLevel
> End Sub
>
> Patrice
>
Patrice,
Merci pour ta réponse.
J'ai vérifié que le code "if left ..." est bien exécuté.
Après avoir fait un tour sur Google, il semble que mon cas ne soit pas
isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela
fonctionne mais j'aurais voulu une solution plus souple que je ne devais
pas adapter en cas d'ajout/suppression de controles.
Bonne fin de journée,
Michel
Peux tu confirmer que Visible est bien True pour tes contrôles lorsque ton traitement se termine ?
Pour moi, ton code me semble : - parcourir les contrôles de niveau 1 (essentiellement litéral de début, balise form puis litéraux de fin) - si un contrôle de niveau 1 commence par admin, on cherche un contrôle de même nom dont l'on modifie la propriété visible ???
Je ferais plutôt quelque chose comme :
SetAdmin(ByVal RootControl As Control,ByVal IsVisible As Boolean) For Each Control In RootControl.Controls If Control.ID.StartsWith("admin_") Then Control.Visible=IsVisible) If Control.Visible Then SetAdmin(Control,IsVisible) Next End Sub
A appeler dans le load par :
For Each Control in Page.Controls SetAdmin Control,True Next
Le principe est parcourir tous les contrôles : - si le contrôle commence par admin il est caché - si le contrôle n'est pas caché, on parcours également tous ses contrôles enfants
Le but est de trouver les contrôles admin_ même si ils sont plus bas dans la hiérarchie. je crois que tu ne descends pas assez pour l'instant.
Patrice
--
"Michel Couche" a écrit dans le message de news:
Patrice wrote:
> Les contrôles sont-il immédiatement au dessous de l'objet Page ? (le
code
> parcourt le niveau 1). Si non, le code sous le "if left"... n'est jamais > exécuté... > > Si les contrôles sont statiques, je les accéderai directement par la > variable correspondante : > > Sub SetUpVisibility_AdminControls(ByVal Adminlevel As Boolean) > admin_A.VisibleminLevel > admin_B.VisibleminLevel > admin_C.VisibleminLevel > End Sub > > Patrice >
Patrice, Merci pour ta réponse. J'ai vérifié que le code "if left ..." est bien exécuté. Après avoir fait un tour sur Google, il semble que mon cas ne soit pas isolé mais je n'ai pas trouvé de réponse qui m'ai aidé.
J'ai utilisé ta solution (via appel individuel de chaque controle). Cela fonctionne mais j'aurais voulu une solution plus souple que je ne devais pas adapter en cas d'ajout/suppression de controles. Bonne fin de journée, Michel