IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Utilisation de Class, Button [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Utilisation de Class, Button
    Bonjour, j'ai une centaine de boutons et je voudrais réduire le nombre de lignes en les déclarant. Les noms de mes boutons sont du type $ButtonA0, $ButtonB0, $ButtonC0, $ButtonA3, $ButtonB5, etc. C'est leur positionnement dans une grid virtuelle qui détermine leur nom. J'ai essayé ceci pour déclarer le premier bouton mais ça n'a pas marché :


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $i = -1
    Do{
     
        $i++
        $_ = "BoutonA" + $i
        write-host = $i #$_
        #$_ = New-Object System.Windows.Forms.Button
     
    }Until($i -eq 0)

    Pensez-vous qu'on puisse trouver une formule qui évite d'avoir à taper 100 lignes pour les déclarer?

    Je voudrais également créer une class pour définir les attributs communs de ces boutons afin de pas avoir à les déclarer un à un comme ceci :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ButtonA0.BackColor = "LightGray"
    $ButtonB0.BackColor = "LightGray"
    $ButtonC0.BackColor = "LightGray"
    ...
    $ButtonF17.BackColor = "LightGray"

    J'ai déjà utilisé les class dans d'autres langages. Savez-vous comment le faire en powershell svp? J'ai essayé sans succès de définir la police de caractères :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Button
    {    
        [string] $Font
     
        Button ([string] Font)
        {
            $this.Font("Arial",18,[System.Drawing.FontStyle]::Bold) 
        }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For ($i=0; $i -le 100; $i++){
        New-Variable -Name "BoutonA$i" -Value $(New-Object System.Windows.Forms.Button) -Force
        (Get-Variable -Name "BoutonA$i" -ValueOnly).Font = New-Object System.Drawing.Font("Arial", 18, [System.Drawing.FontStyle]::Bold)
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    1 ligne

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For ($i=0; $i -le 100; $i++){
        (New-Variable -Name "BoutonA$i" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Arial", 18, [System.Drawing.FontStyle]::Bold)
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    N'ayant que un powershell 3, je dérive la classe directement en c#

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $Source = @”
    namespace MonProjet
    {
        public partial class CustomButton : System.Windows.Forms.Button
        {
            public CustomButton()
            {
                UseVisualStyleBackColor = false;
                BackColor = System.Drawing.Color.LightGray;
            }
        }
    }
    “@
    Add-Type -TypeDefinition $Source -ReferencedAssemblies "System.Windows.Forms.dll", "System.Drawing" -Language CSharp -WarningAction SilentlyContinue
     
    $OKButton = New-Object MonProjet.CustomButton

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour cette solution qui me permet d'économiser pas mal de lignes de code.
    Cette boucle convient bien pour les boutons d'une même colonne, $boutonA1, $boutonA2,...,$boutonA100.
    Par contre pour ceux d'une même ligne, $boutonB1, $boutonC1, $boutonD1,...,$boutonZ1, il faut une formule qui incrémente les 26 lettres de l'alphabet.
    Je vais voir si ça existe ou comment la créer.

    Pour ce qui est de la Class, je vais étudier ce document mise en œuvre des classes sous Powershell version 5

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    il faut une formule qui incrémente les 26 lettres de l'alphabet
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $alphabet = [char[]]([char]'A'..[char]'Z')

    Pour ce qui est de la Class, je vais étudier ce document
    C'est bien, mais ma class dérivée ne convient pas ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    For ($i=0; $i -le 100; $i++){
    New-Variable -Name "BoutonA$i" -Value $(New-Object System.Windows.Forms.Button)
    }
    Je reviens d'abord sur la boucle des boutons BoutonA$i que je viens de tester. Dans mon code, j'ai 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ButtonA1 = New-Object System.Windows.Forms.Button
    $ButtonA1.BackColor = "LightGray"
    Si je supprime la première ligne après avoir insérer juste avant la boucle du dessus, j'ai une erreur qui apparait et le bouton n'apparait pas dans mon interface.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    La propriété «*BackColor*» est introuvable dans cet objet. Vérifiez qu’elle existe et qu’elle peut être définie.
    Au caractère C:\Users\...\monInterface.ps1:124 : 1
    + $ButtonA1.BackColor = "LightGray"

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Il semble que nous n'avons pas le code qui génère l'erreur, ce qui complique l'analyse.
    Si tu supprimes la déclaration du bouton c'est peut être normal.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Il semble que nous n'avons pas le code qui génère l'erreur, ce qui complique l'analyse.
    Si tu supprimes la déclaration du bouton c'est peut être normal.
    Pardon, je croyais que la boucle déclarais les boutons en même temps qu'elle définissait leurs propriétés. En fait elle ne fait que définir les propriétés. Y'a pas moyen de faire les deux en même temps?

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Regarde mon post de 18h07

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Regarde mon post de 18h07
    Je tape :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ButtonA17 = New-Object System.Windows.Forms.Button
     
    For ($i=16; $i -le 18; $i++){
        (New-Variable -Name "BoutonA$i" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold)
    }

    la police ne s'applique pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    New-Variable -Name "BoutonA17" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru.Value.Font = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold)
    Si je met uniquement la ligne ci-dessus, elle n'a aucun effet non plus.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Le mieux est de prendre un exemple simple :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Add-Type -AssemblyName System.Windows.Forms
     
    $Form = New-Object system.Windows.Forms.Form
     
    $ButtonA2 = New-Object System.Windows.Forms.Button
    $ButtonA2.BackColor = "LightGray"
    $Form.Controls.Add($ButtonA2)
     
    (New-Variable -Name "BoutonA1" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold)
    $ButtonA1.BackColor = "Green"
    $Form.Controls.Add($ButtonA1)
     
    $Form.ShowDialog()

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Si tu déclare ta variable en l'appelant BoutonA1 tu doit utiliser le même nom pour l'utiliser (et pas ButtonA1).

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Si tu déclare ta variable en l'appelant BoutonA1 tu doit utiliser le même nom pour l'utiliser (et pas ButtonA1).
    Je m'excuse pour cette faute d'inattention. Donc à présent tout fonctionne, j'ai plus besoin de déclarer mes boutons ligne par ligne.

    Par contre, j'ai un problème avec l'alphabet :
    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $alphabet = [char[]]([char]'A'..[char]'Z')
     
    write-host Button$alphabet[1]
    write-host $alphabet[0][/CODE]

    Ça me répond :

    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ButtonA B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 
    A

    J'ai un problème de concaténation car :
    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write-host "Button"$alphabet[0]

    donne :


    Il me faut éliminer l'espace avant le A.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Il me faut éliminer l'espace avant le A.
    J'ai trouvé :

    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $alphabet = [char[]]('A'[0]..'Z'[0])
    $j=0
     
    For ($i=0; $i -le 17; $i++){
        $myBut = "Button" + $alphabet[$i]
        (New-Variable -Name $myBut$j -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold)
    }

    Avec ce code, je déclare les boutons $ButtonB0 à ButtonJ0 et je définis la police de caractère.

    Ce que je voudrais maintenant, pour finir, c'est utiliser la Class. Plutôt que de définir la police dans la boucle, je voudrais affecter mon bouton à une Class qui définit les propriétés. Je sais pas comment faire ça, mon code fonctionne pas :

    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $Source = @”
    namespace MonProjet
    {
        public partial class CustomButton : System.Windows.Forms.Button
        {
            public CustomButton()
            {
                UseVisualStyleBackColor = false;
                BackColor = System.Drawing.Color.LightGray;
            }
        }
    }
    “@
    Add-Type -TypeDefinition $Source -ReferencedAssemblies "System.Windows.Forms.dll", "System.Drawing" -Language CSharp -WarningAction SilentlyContinue
     
    For ($i=-1; $i -le 18; $i++){
        #(New-Variable -Name "ButtonA$i" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Times New Roman", 10, [System.Drawing.FontStyle]::Regular)
        ButtonA$i = New-Object MonProjet.CustomButton
    }

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Ce que je voudrais maintenant, pour finir, c'est utiliser la Class.
    J'ai rectifié et ça marche :

    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $Source = @”
    namespace MonProjet
    {
        public partial class CustomButton : System.Windows.Forms.Button
        {
            public CustomButton()
            {
                UseVisualStyleBackColor = false;
                BackColor = System.Drawing.Color.LightGray;
            }
        }
    }
    “@
    Add-Type -TypeDefinition $Source -ReferencedAssemblies "System.Windows.Forms.dll", "System.Drawing" -Language CSharp -WarningAction SilentlyContinue
     
     
     
    For ($i=0; $i -le 17; $i++){
        New-Variable -Name "ButtonA$i" -Value $(New-Object MonProjet.CustomButton)
    }
     
    For ($i=0; $i -le 17; $i++){
        (New-Variable -Name "ButtonK$i" -Value $(New-Object System.Windows.Forms.Button) -Force -PassThru).Value.Font = New-Object System.Drawing.Font("Times New Roman", 10, [System.Drawing.FontStyle]::Regular)
    }

    Merci beaucoup pour cette précieuse aide qui m'a bien fait progresser.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  2. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57
  3. utilisation de CLASS dans un formulaire
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/11/2004, 16h38
  4. utiliser des classes dont on n'a pas le source
    Par kocin dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/08/2004, 16h05
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo