Question [Résolu] GUI Afficher / Masquer Bouton

Plus d'informations
il y a 13 ans 1 mois #13918 par PoSH_Newbie
Bonjour,

Je souhaite dans un formulaire GUI contenant 2 boutons A et B pouvoir faire une bascule d'affichage des boutons sans pour autant changer de formulaire.

- Form_A (Affiche au départ BTN_1)
- Lors du click sur BTN_1 => Masquer BTN_1 et Afficher BTN_2.

Voici ce que j'ai fait (sans résultat efficace bien sur :huh: )

[code:1]# Formulaire GUI de test: bouton visible / invisible dans un form


## --- ETAPE PREALABLE ---

# Déclaration des Applications Graphiques

[void] [System.Reflection.Assembly]::loadwithpartialname(\"System.Drawing\"«»)
[void] [System.Reflection.Assembly]::LoadWithPartialName(\"system.windows.forms\"«»)

## --- CREATION DES FONCTIONS ---

function Compo_Form_A { # Composition du formulaire

## Gestion du positionnement dans le formulaire

$Lin1 = 10

$Col1 = 10
$Col2 = 170

## Gestion des Tailles dans le formulaire

$Larg2 = 150
$Haut1 = 25


## Les Boutons

$BTN_1 = New-Object System.Windows.Forms.Button
$BTN_1.UseVisualStyleBackColor = $True
$BTN_1.Size = New-Object System.Drawing.Size($Larg2,$Haut1)
$BTN_1.Location = New-Object System.Drawing.Size($Col1,$Lin1)
$BTN_1.Text = \"Visible\"
$BTN_1.add_Click({BTN_1_Click})

$BTN_2 = New-Object System.Windows.Forms.Button
$BTN_2.UseVisualStyleBackColor = $True
$BTN_2.Size = New-Object System.Drawing.Size($Larg2,$Haut1)
$BTN_2.Location = New-Object System.Drawing.Size($Col2,$Lin1)
$BTN_2.Text = \"INVISIBLE\"
$BTN_2.add_Click({BTN_2_Click})


## Ajout des objets au Formulaire A

$form_A.Controls.Add($BTN_1)
}

Function BTN_1_Click
{
$form_A.Controls.remove($BTN_1) # Retirer le bouton 1
$form_A.Controls.Add($BTN_2) # Ajouter le bouton 2
}

Function BTN_2_Click
{
$form_A.Controls.remove($BTN_2) # Retirer le bouton 2
$form_A.Controls.add($BTN_1) # Ajouter le bouton 1
}

## --- Formulaires ---

# Déclaration du formulaire

$form_A = New-Object System.Windows.Forms.Form
[System.Windows.Forms.Application]::EnableVisualStyles()
$Largeur = 520
$Hauteur = 230
$form_A.Size = New-Object System.Drawing.Size ($Largeur,$Hauteur)
$form_A.Text = \"TEST Bouton Visible / Invisible\"
$form_A.TopMost = $true
$form_A.KeyPreview = $true
$form_A.Add_KeyDown({if ($_.KeyCode -eq \"Escape\"«») {$form_A.Close()}})

$InitialFormWindowState = $form_A.WindowState

Compo_Form_A

$form_A.add_Shown({$form_A.Activate()})
[void]$form_A.ShowDialog()[/code:1]

ce code est le dernier test effectué, après avoir tenté le méthodes show() et hide() sur $BTN_1 et $BTN_2

J'ai beau chercher dans la bibliothèque MSDN msdn.microsoft.com/en-us/library/k50ex0x9%28VS.80%29.aspx ou dans les forums un topic de ce type, l'objet bouton semble être le seul objet que je ne puisse masquer...

Message édité par: PowerShell Newbie, à: 8/02/13 21:25<br><br>Message édité par: PowerShell Newbie, à: 13/02/13 16:06


PowerShell-scripting.com = alias de SHARE-PSKnowledge

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 mois #13925 par Laurent Dardenne
Salut,
tu as un pb de portée dans ton code ;
[code:1]
Function BTN_1_Click
{
Write-Warning \&quot;`$BTN_1 is Null = $($BTN_1 -eq $null)\&quot;
$form_A.Controls.remove($BTN_1) # Retirer le bouton 1
$form_A.Controls.Add($BTN_2) # Ajouter le bouton 2
}
[/code:1]
Ajoute un nom à tes composants et utilise la méthode Find
[code:1]
$BTN_1 = New-Object System.Windows.Forms.Button
$BTN_1.Name = \&quot;Bouton1\&quot;
...
$BTN_2 = New-Object System.Windows.Forms.Button
$BTN_1.Name = \&quot;Bouton2\&quot;


$b=$form_A.Controls.Find('Bouton2',$false)
$b[0].Text
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 mois #13954 par PoSH_Newbie
Merci laurent,

tu as un pb de portée dans ton code

=&gt; as tu des liens concernant cette partie ? je ne maîtrise pas encore cet aspect et voudrait approfondir le sujet.

pour les \&quot;.name\&quot;, je ne comprenait pas encore quelle en était l'utilité donc je ne les mentionnait pas sur mes objets :whistle:

Par contre, je ne comprend pas à quel endroit placer la partie

[code:1]
$b=$form_A.Controls.Find('Bouton2',$false)

$b[0].Text[/code:1]

et quelle en est la finalité :blink:<br><br>Message édité par: PowerShell Newbie, à: 13/02/13 12:25


PowerShell-scripting.com = alias de SHARE-PSKnowledge

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 mois #13955 par Laurent Dardenne
PowerShell Newbie écrit:

tu as un pb de portée dans ton code

=&gt; as tu des liens concernant cette partie ?

Oui, dans le magasin de canne à pêche ;-)
[code:1]Get-Help Scope[/code:1]
PowerShell Newbie écrit:

pour les \&quot;.name\&quot;, je ne comprenait pas encore quelle en était l'utilité donc je ne les mentionnait pas sur mes objets :whistle:

Un conseil, évite de nommer tes variables Btn_1, Btn_2 c'est illisible. Nomme les, par exemple, avec le nom de l'action Btn_Close, Btn_OpenConfigurationFile.
PowerShell Newbie écrit:

Par contre, je ne comprend pas à quel endroit placer la partie

[code:1]
$b=$form_A.Controls.Find('Bouton2',$false)

$b[0].Text[/code:1]

Pour ton code ACTUEL, place le dans chaque fonction devant changer l'état de ton bouton. Et ici tu pourrais également factoriser ton gestionaire d'événement ( ta fonction), car via le Sender ($this) tu connais le bouton qui a déclenché l'event ($this.Name)
PowerShell Newbie écrit:


et quelle en est la finalité?

Là il faut demander au fabricant de la canne à pêche.
Bonne pêche !

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 mois #13957 par PoSH_Newbie
MERCI (encore :P )

- Pour la portée, (je ne connaissais pas le terme, mais j'utilisais effectivement la notion de [code:1]$Script:MA_VARIABLE[/code:1] dès que je faisais appel à des fonctions contenues dans mon script.

[code:1]Un conseil, évite de nommer tes variables Btn_1, Btn_2 c'est illisible. Nomme les, par exemple, avec le nom de l'action Btn_Close, Btn_OpenConfigurationFile.[/code:1]
- Là encore merci, mon réflexe après ta première réponse était de faire plutôt [code:1]$BTN_1.name = BTN_1[/code:1] :laugh:


PowerShell-scripting.com = alias de SHARE-PSKnowledge

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena