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 :

Probl�me de variable dans les fonctions. (windows forms) [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre �m�rite Avatar de gretch
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par d�faut Probl�me de variable dans les fonctions. (windows forms)
    Bonsoir, voila mon souci,

    voici un code qui fonctionne tres bien
    Code : 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
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Data Entry Form"
    $objForm.Size = New-Object System.Drawing.Size(300,200) 
    $objForm.StartPosition = "CenterScreen"
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "OK"
    $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
    $objForm.Controls.Add($OKButton)
    
    $objForm.Topmost = $True
    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()
    j'ai besoin de le faire marcher sous cette forme :
    Code : 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
    25
    26
    27
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    
    function add-form(){
    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Data Entry Form"
    $objForm.Size = New-Object System.Drawing.Size(300,200) 
    $objForm.StartPosition = "CenterScreen"
    }
    function add-button(){
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "OK"
    $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
    $objForm.Controls.Add($OKButton)
    }
    
    function turnon {
    $objForm.Topmost = $True
    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()
    }
    
    add-form
    add-button
    turnon
    vaut il mieux utiliser des returns ? (mais je ne sait pas trop comment...) des variables globales ? une autre subtilit� ?
    voil� le topo, j'ai hate d'avoir une solution je suis sur un script qui me passionne xD

  2. #2
    Membre �m�rite Avatar de gretch
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par d�faut
    Trouver ! je ne sait pas si c'est la meilleur solution mais cela marche ! je reste ouvert � toutes proposition plus adapt� !


    Code : 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
    25
    26
    27
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    
    function add-form(){
    $script:objForm = New-Object System.Windows.Forms.Form 
    $script:objForm.Text = "Data Entry Form"
    $script:objForm.Size = New-Object System.Drawing.Size(300,200) 
    $script:objForm.StartPosition = "CenterScreen"
    }
    function add-button(){
    $script:OKButton = New-Object System.Windows.Forms.Button
    $script:OKButton.Location = New-Object System.Drawing.Size(75,120)
    $script:OKButton.Size = New-Object System.Drawing.Size(75,23)
    $script:OKButton.Text = "OK"
    $script:OKButton.Add_Click({$x=$objTextBox.Text;$script:objForm.Close()})
    $script:objForm.Controls.Add($script:OKButton)
    }
    
    function turnon {
    $script:objForm.Topmost = $True
    $script:objForm.Add_Shown({$script:objForm.Activate()})
    [void] $script:objForm.ShowDialog()
    }
    
    add-form
    add-button
    turnon

  3. #3
    R�dacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par d�faut
    Salut,
    Citation Envoy� par gretch Voir le message
    vaut il mieux utiliser des returns ?
    C'est une possible conception, dans ton cas la fonction retournera un objet diff�rent, mais param�tr� � l'identique.
    Citation Envoy� par gretch Voir le message
    (mais je ne sait pas trop comment...)
    Write-Output, Return et par d�faut PS �met tout objet dans le pipeline :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
      $OKButton = New-Object System.Windows.Forms.Button
      Write-Output $OKButton #pr�cise l'intention
      $OKButton #comportement par d�faut identique � Write-Output
      Return $OKButton # �met l'objet dans le pipe et quitte le code en cours
    Citation Envoy� par gretch Voir le message
    des variables globales ? une autre subtilit� ?
    On retarde autant que possible l'usage de globale, la port�e script est une solution. Cela d�pend de l'usage de ton code :
    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    
    function add-form(){
    $script:objForm = New-Object System.Windows.Forms.Form 
    $script:objForm.Text = "Data Entry Form"
    $script:objForm.Size = New-Object System.Drawing.Size(300,200) 
    $script:objForm.StartPosition = "CenterScreen"
    }
    
    function add-button{
      $OKButton = New-Object System.Windows.Forms.Button
      $OKButton.Location = New-Object System.Drawing.Size(75,120)
      $OKButton.Size = New-Object System.Drawing.Size(75,23)
      $OKButton.Text = "OK"
      $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
      $script:objForm.Controls.Add($OKButton)
    }
    
    function turnon {
      $script:objForm.Topmost = $True
      $script:objForm.Add_Shown({$objForm.Activate()})
      [void] $script:objForm.ShowDialog()
    }
    
    add-form
    add-button
    turnon
    
    test-path variable:objForm
    test-path variable:script:objForm
    $script:objForm.Dispose()
    Ne pas oublier l'appel � Dispose(), ce n'est pas une option :-)
    Dans ton dernier post, les objets ajout�s ainsi objForm.Controls.Add() n'ont pas besoin d'avoir la port�e script,.
    N'oublie pas le code suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $script:OKButton.Add_Click({$x=$objTextBox.Text;$script:objForm.Close()})

  4. #4
    R�dacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par d�faut
    Une autre approche pour manipuler tes composants, sous r�serve de le nommer :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      $OKButton.Name = "btnOK"
      $OKButton.Add_Click(
       {
         Write-host "Composant courant :$($this.Name)"
         Write-host "Recherche le texte d'un composant en utilisant son nom :$(($script:objForm.Controls.Find('btnOK',$false)).Text)"
         $script:objForm.Close()
       }
      )

  5. #5
    Membre �m�rite Avatar de gretch
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par d�faut
    re

    bon un petit retour...

    les returns : j'ai pour l"instant abandonn� cette id�e, je passe par la scope script comme tu as pu le constater

    Ne pas oublier l'appel � Dispose(),
    mouarf, que fait donc cet appel (il "clos" la form si j'ai bien compris cela ne va t'il pas m'emp�cher de la modifier ensuite ?)je crois que j'ai pas tout compris, vu que tu utilise aussi l'appel .close() ,

    D'une mani�re g�n�rale, pour voir ou je veux en venir je te propose de jeter un petit coup d'oeil sur ce post :
    http://www.developpez.net/forums/d14...m/#post7935402

    en gros le but de la manip est de convertir un GUI KODA en GUI Powershell c'est bien partie ! (entre autre grace � toi )
    n'hesite pas � venir donner un coups de main xD

    Merci encore !

  6. #6
    R�dacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par gretch Voir le message
    mouarf, que fait donc cet appel
    Il lib�re explicitement les ressources de l'objet Form. Close() devrait suffire, sauf que :
    Il existe deux situations dans lesquelles un formulaire n'est pas dispos� sur Close : (1) lorsqu'il fait partie d'une application MDI et que le formulaire n'est pas visible ; (2) lorsque vous avez affich� le formulaire en utilisant ShowDialog. Dans ces circonstances, vous devez appeler manuellement Dispose pour marquer tous les contr�les du formulaire pour le garbage collection.
    Citation Envoy� par gretch Voir le message
    n'hesite pas � venir donner un coups de main xD
    J'ai du temps en ce moment, mais j'ai d'autres priorit�s. D�sol�.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 9
    Dernier message: 23/07/2014, 17h13
  2. [NASM] Probl�me de variable dans la fonction appelante
    Par Joccd dans le forum x86 32-bits / 64-bits
    R�ponses: 4
    Dernier message: 01/04/2009, 14h45
  3. probl�me de variable dans une fonction
    Par K4trix dans le forum C
    R�ponses: 9
    Dernier message: 06/07/2006, 09h38
  4. [EasyPHP] probl�me de visibilit� des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 4
    Dernier message: 23/10/2005, 01h55
  5. R�ponses: 3
    Dernier message: 07/03/2005, 13h13

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