none
[System.Windows.Forms.MessageBox] Tester si une Box est déjà ouverte RRS feed

  • Question

  • Bonjour à tous,

    Une question concernant System.Windows.Form,

    Avant d'afficher une "Message Box" j'ai besoin de savoir si cette dernière n'est pas déjà ouverte.

    Mon Script, très simple, est le suivant :

    function Error  
    {
    $message_Out = "Mon Message d'Erreur"
    $titre= "ERREUR" #Variabilise le titre de la poup Windows
    $Btn = 0  #Variabilise le type de bouton de la popup Windows
    $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur
    
    [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
    
    }      

    Existe t'il une variable ou autre à checker ?

    Merci d'avance de vos retours.



    • Modifié Herve31 mercredi 6 mai 2015 12:21
    mercredi 6 mai 2015 12:12

Réponses

  • Il est préférable de positionner le flag avant l'appel de la fenêtre :

    function Error{ 
     param ($count)
      if($script:Flag -eq 0) {
       Try {
        $Script:Flag = 1
        $message_Out = "Mon Message d'Erreur $count"
        $titre= "ERREUR"
        $Btn = 0  
        $Icon = 16
        $Ret = [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
       } 
       Finally {
         $script:Flag = 0
       }
      }
    }

    Ceci dit et à moins que tu en aies un usage particulier, c'est une fenêtre modale bloquant l'exécution du script.


    Beatus, qui prodest, quibus potest.

    • Marqué comme réponse Herve31 mercredi 13 mai 2015 10:58
    mercredi 6 mai 2015 15:27
    Modérateur
  • Attention au scope de la variable, plutot :

    $Flag = 0;

    function Error { if($Flag == 0) { $message_Out = "Mon Message d'Erreur" $titre= "ERREUR" #Variabilise le titre de la poup Windows $Btn = 0 #Variabilise le type de bouton de la popup Windows $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur $Ret = [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon) $Script:Flag = 1 if($Ret == DialogResult.OK){$Flag = 0} }}



    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr

    • Marqué comme réponse Herve31 mercredi 13 mai 2015 10:58
    mercredi 6 mai 2015 14:08

Toutes les réponses

  • public $Flag = 0;

    function Error {
    if($Flag == 0) { $message_Out = "Mon Message d'Erreur" $titre= "ERREUR" #Variabilise le titre de la poup Windows $Btn = 0 #Variabilise le type de bouton de la popup Windows $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur $Ret = [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
    $Flag = 1
    if
    ($Ret == DialogResult.OK){$Flag = 0}
    }}

    Peut-être un truc du genre....

    mercredi 6 mai 2015 12:56
  • Attention au scope de la variable, plutot :

    $Flag = 0;

    function Error { if($Flag == 0) { $message_Out = "Mon Message d'Erreur" $titre= "ERREUR" #Variabilise le titre de la poup Windows $Btn = 0 #Variabilise le type de bouton de la popup Windows $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur $Ret = [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon) $Script:Flag = 1 if($Ret == DialogResult.OK){$Flag = 0} }}



    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr

    • Marqué comme réponse Herve31 mercredi 13 mai 2015 10:58
    mercredi 6 mai 2015 14:08
  • Il est préférable de positionner le flag avant l'appel de la fenêtre :

    function Error{ 
     param ($count)
      if($script:Flag -eq 0) {
       Try {
        $Script:Flag = 1
        $message_Out = "Mon Message d'Erreur $count"
        $titre= "ERREUR"
        $Btn = 0  
        $Icon = 16
        $Ret = [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
       } 
       Finally {
         $script:Flag = 0
       }
      }
    }

    Ceci dit et à moins que tu en aies un usage particulier, c'est une fenêtre modale bloquant l'exécution du script.


    Beatus, qui prodest, quibus potest.

    • Marqué comme réponse Herve31 mercredi 13 mai 2015 10:58
    mercredi 6 mai 2015 15:27
    Modérateur
  • Merci pour vos suggestions,

    J'ai pas trop de temps pour bosser sur ce script aujourd'hui.

    Je teste tout ça et fait un feedback dès que possible.

    lundi 11 mai 2015 09:45
  • Merci à vous cela fonctionne simplement comme suit :
    $script:flag1 ="0"
    
    function Error 
    {
        if($script:Flag1 -eq "0") 
         { 
         $message_Out = "Un ou plusieurs champs sont manquants ou incorrects"
         $titre= "ERREUR" #Variabilise le titre de la poup Windows 
         $Btn = 0 #Variabilise le type de bouton de la popup Windows 
         $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur 
         [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
         $script:Flag1 = "1"       
    }}

    mercredi 13 mai 2015 10:56
  • Merci à vous cela fonctionne simplement comme suit :

    Permets moi d'en douter.

    Le flag n'est jamais remis à zéro, seul le premier appel fonctionnera de manière attendu, de plus ton appel à la méthode Show() renvoi une valeur dans le pipeline, ce qui génère un bug difficile à retrouver.

    Si cela fonctionne, ce ne peut être que dans ton contexte, que l'on ne connait pas...


    Beatus, qui prodest, quibus potest.

    mercredi 13 mai 2015 11:45
    Modérateur
  • J'avoue être débutant en scripting et encore plus en powershell,

    En résumé mon projet est de faire une interface simplifiée ce création de compte AD.

    J'ai pas mal de chose à régler encore dans mon script , j'y vais à taton et pas à pas.

    Voici mon code complet (j'ai remplacé les caractères confidentiels par des  ***)

    CLS
    
    #region Import the Assemblies
    [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
    Import-Module ActiveDirectory
    #endregion
    
    
    
    
    $script:flag1 ="0"
    
    function Error 
    {
    
        if($script:Flag1 -eq "0") 
         { 
         $message_Out = "Un ou plusieurs champs sont manquants ou incorrects"
         $titre= "ERREUR" #Variabilise le titre de la poup Windows 
         $Btn = 0 #Variabilise le type de bouton de la popup Windows 
         $Icon = 16 #Variabilise l'icone de la popup Windows, ici Erreur 
         [System.Windows.Forms.MessageBox]::Show($Message_Out, $Titre , $Btn, $Icon)
         $script:Flag1 = "1"
         
     }
    
    
     function Stop
     {$form1.close()
     
     }
    
    function CreationCompte #Creation du compte
    {
    #region Variables 
    
    [string]$script:Nom = $textBoxNom.Text
    [string]$script:Prenom = $textBoxPrenom.text
    [string]$script:Contrat = $ComboBoxContrat.text
    [string]$script:Matricule = $textBoxMatricule.text
    [string]$script:Fonction = $ComboBoxFonction.text
    [string]$script:Deleg = $ComboBoxDR.text
    [string]$script:DR = $ComboBoxDR.text
    
    
    $script:cn = $Prenom + " " + $Nom
    $script:DisplayName = $cn
    $script:SamAccountNameEXT = ($Prenom[0] + $nom[0] + ($nom[($nom.Length)-1]) + ".ext").ToUpper()
    $script:SamAccountNameINT = ($Prenom[0] + $nom[0] + $Matricule).ToUpper()
    #endregion
    
    #region recuperation des infos de perso du compte
    switch ($Contrat)
    	 { INTERIM {$samaccountname = $samaccountnameEXT}
           CDD {$samaccountname= $SamAccountNameINT}
           CDI {$samaccountname= $SamAccountNameINT}
           default 
           {Error}
           
     	 }
    	 
    switch ($DR)
    	{"CAEN" {$DR = "CAE"}
         "DIJON" {$DR = "DIJ"}
    	 "DRAG" {$DR = "DRAG"}
    	 "EXTERIEUR" {$DR = "EXT"}
    	 "****" {$DR = "FISUEL"}
    	 "LILE" {$DR = "LIL"}
    	 "LIMOGES" {$DR = "LIM"}
    	 "LYON" {$DR = "LYO"}
    	 "MARSEILLE" {$DR = "MAR"}
    	 "MAYOTTE" {$DR = "MAY"}
    	 "GENNEVILLIERS" {$DR = "PAR"}
    	 "RENNES" {$DR = "REN"}
    	 "REUNION" {$DR = "REU"}
    	 "SERVICE CENTRAL" {$DR = "SCL"}
    	 "TOULOUSE" {$DR = "TOU"}
         default {Error}
    	}
    
    switch ($Fonction)
    	{"INSPECTEUR" {$OU = "InteractiveUsers"
                       $HD = ""
                      }
    	 "TECHNICIEN" {$OU = "InteractiveUsers"
                       $HD = "\\PPINFODC8\USERS\$samaccoutname"
                      }
         "SEDENTAIRE SUR POSTE WYSE" {$OU = "VDI_USR"
                                      $HD = "\\PPINFODC8\USERS\$samaccountname"
                                     }
         "SEDENTAIRE SUR PC PORTABLE" {$OU = "InteractiveUsers"
                                       $HD = "\\PPINFODC8\USERS\$samaccountname"
                                      }
         default {Error}
    	}
    #endregion
    
    #region gestion des erreurs
    
    [bool]$OK1 = $false
    [bool]$OK2 = $false
    
       if((($Nom -eq "") -or ($Nom -eq "Editez le Nom ici" )) -or (($Prenom -eq "") -or ($Prenom -eq "Editez le Prénom ici" )) -or (($Contrat -eq "") -or ($Contrat -eq "Selectionnez un type de contrat" )) -or (($Fonction -eq "") `
        -or ($Fonction -eq "Selectionnez un type de contrat" )) -or (($DR -eq "") -or ($DR -eq "Selectionnez la délégation ici" )))
       
        {Error}    
       
       else{$OK1 = $true}
    
       if (($Contrat -ne "INTERIM") -and (($Matricule -eq "") -or ($Matricule -eq "Editez le matricule CCMX à 4 chiffres ici") -or ($Matricule.Length -ne "4")))
        {Error} 
    
       else{$OK2 = $true}
    
    #endregion
    
    
    #region creation du compte
    if (($OK1 = $true) -and ($OK1 = $true))
        {
        New-ADUser `
        -Name $DisplayName `
        -Path  "OU=$OU,OU=Users,OU=$DR,OU=truc,DC=preprod,DC=truc,DC=local" `
        -SamAccountName  $samaccountname `
        -DisplayName $DisplayName `
        -givenname $Prenom `
        -surname $Nom `
        -userprincipalname ($Prenom + "." + $Nom + "@truc.com ")  `
        -AccountPassword (ConvertTo-SecureString "truc123" -AsPlainText -Force) `
        -ChangePasswordAtLogon $False  `
        -Enabled $true  `
        -office “Délégation régionale $Deleg” `
        -HomeDrive "U:" `
        -HomeDirectory $HD
    
    
        if ($Contrat = "INTERIM")
            {Set-ADAccountExpiration $samaccountname -DateTime $DateSortie.value} 
    
    
    #endregion
    
    
    
    #region creation du home Directory et passage des ACL
    
            $destDir = "\\PPINFODC8\USERS\$SamAccountName"
                If (!(Test-Path $destDir)) 
                {
                    New-Item -Path $destDir -ItemType Directory
     
                }
                else {}
    
            $SID = Get-AdUser -Filter 'samaccountname -Like $SamAccountName' | Select-Object sid
    
    
    
            Get-Item $DestDir | Disable-AccessInheritance 
            Get-Access -Path $DestDir  | where {$_.Account -ne "S-1-5-32-544"} | Remove-Access
            Add-Access -path $DestDir   -Account $($SID.sid.value) -AccessRights Modify, Synchronize
            Add-Access -path $DestDir   -Account "S-1-5-32-544" -AccessRights FullControl
            Add-Access -path $DestDir   -Account "S-1-5-18" -AccessRights FullControl
            Add-Access -Path $DestDir   -Account "S-1-3-0" -AccessRights FullControl 
            Set-Owner -Path  $DestDir   -Account "S-1-5-32-544"
    
    #endregion
    
    }
    }
    
    
    #Generated Form Function
    function GenerateForm {
    
    
    #region Generated Form Objects
    $form1 = New-Object System.Windows.Forms.Form
    $dateSortie = New-Object System.Windows.Forms.DateTimePicker
    $labelDateSortie = New-Object System.Windows.Forms.Label
    $buttonCreer = New-Object System.Windows.Forms.Button
    $buttonAnnuler = New-Object System.Windows.Forms.Button
    $comboBoxDR = New-Object System.Windows.Forms.ComboBox
    $comboBoxFonction = New-Object System.Windows.Forms.ComboBox
    $labelDR = New-Object System.Windows.Forms.Label
    $textBoxMatricule = New-Object System.Windows.Forms.TextBox
    $labelFonction = New-Object System.Windows.Forms.Label
    $labelMatricule = New-Object System.Windows.Forms.Label
    $labelNom = New-Object System.Windows.Forms.Label
    $comboBoxContrat = New-Object System.Windows.Forms.ComboBox
    $labelContrat = New-Object System.Windows.Forms.Label
    $labelPrenom = New-Object System.Windows.Forms.Label
    $textBoxPrenom = New-Object System.Windows.Forms.TextBox
    $textBoxNom = New-Object System.Windows.Forms.TextBox
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
    
    #----------------------------------------------
    #Generated Event Script Blocks
    #----------------------------------------------
    #Provide Custom Code for events specified in PrimalForms.
    $buttonAnnuler_OnClick= 
    {
    #TODO: Place custom script here
    $form1.close() 
    }
    
    $handler_label9_Click= 
    {
    #TODO: Place custom script here
    
    }
    
    $buttonCreer_OnClick= 
    {
    #TODO: Place custom script here
    
    CreationCompte
    
    #$form1.close() 
    
    }
    
    $handler_dateTimePicker2_ValueChanged= 
    {
    #TODO: Place custom script here
    
    }
    
    $handler_comboBox2_SelectedIndexChanged= 
    {
    #TODO: Place custom script here
    
    }
    
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    	$form1.WindowState = $InitialFormWindowState
    }
    
    #----------------------------------------------
    #region Generated Form Code
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 459
    $System_Drawing_Size.Width = 547
    $form1.ClientSize = $System_Drawing_Size
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $form1.Name = "form1"
    $form1.Text = "CREATION COMPTE AD truc"
    
    $dateSortie.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 25
    $System_Drawing_Point.Y = 281
    $dateSortie.Location = $System_Drawing_Point
    $dateSortie.Name = "dateSortie"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 20
    $System_Drawing_Size.Width = 200
    $dateSortie.Size = $System_Drawing_Size
    $dateSortie.TabIndex = 21
    $dateSortie.add_ValueChanged($handler_dateTimePicker2_ValueChanged)
    
    $form1.Controls.Add($dateSortie)
    
    $labelDateSortie.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 255
    $labelDateSortie.Location = $System_Drawing_Point
    $labelDateSortie.Name = "labelDateSortie"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 165
    $labelDateSortie.Size = $System_Drawing_Size
    $labelDateSortie.TabIndex = 20
    $labelDateSortie.Text = "Date de sortie pour les non CDI:"
    $labelDateSortie.add_Click($handler_label9_Click)
    
    $form1.Controls.Add($labelDateSortie)
    
    
    $buttonCreer.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 316
    $System_Drawing_Point.Y = 391
    $buttonCreer.Location = $System_Drawing_Point
    $buttonCreer.Name = "buttonCreer"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 75
    $buttonCreer.Size = $System_Drawing_Size
    $buttonCreer.TabIndex = 19
    $buttonCreer.Text = "Créer"
    $buttonCreer.UseVisualStyleBackColor = $True
    $buttonCreer.add_Click($buttonCreer_OnClick)
    
    $form1.Controls.Add($buttonCreer)
    
    
    $buttonAnnuler.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 154
    $System_Drawing_Point.Y = 391
    $buttonAnnuler.Location = $System_Drawing_Point
    $buttonAnnuler.Name = "buttonAnnuler"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 75
    $buttonAnnuler.Size = $System_Drawing_Size
    $buttonAnnuler.TabIndex = 18
    $buttonAnnuler.Text = "Annuler"
    $buttonAnnuler.UseVisualStyleBackColor = $True
    $buttonAnnuler.add_Click($buttonAnnuler_OnClick)
    
    $form1.Controls.Add($buttonAnnuler)
    
    $comboBoxDR.DataBindings.DefaultDataSourceUpdateMode = 0
    $comboBoxDR.FormattingEnabled = $True
    $comboBoxDR.Items.Add("CAEN ")|Out-Null
    $comboBoxDR.Items.Add("DIJON")|Out-Null
    $comboBoxDR.Items.Add("EXTERIEUR")|Out-Null
    $comboBoxDR.Items.Add("FISUEL")|Out-Null
    $comboBoxDR.Items.Add("LILE")|Out-Null
    $comboBoxDR.Items.Add("LIMOGES")|Out-Null
    $comboBoxDR.Items.Add("LYON")|Out-Null
    $comboBoxDR.Items.Add("MARSEILLE")|Out-Null
    $comboBoxDR.Items.Add("MAYOTTE")|Out-Null
    $comboBoxDR.Items.Add("GENNEVILLIERS")|Out-Null
    $comboBoxDR.Items.Add("RENNES")|Out-Null
    $comboBoxDR.Items.Add("REUNION")|Out-Null
    $comboBoxDR.Items.Add("SERVICE CENTRAL")|Out-Null
    $comboBoxDR.Items.Add("TOULOUSE")|Out-Null
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 316
    $System_Drawing_Point.Y = 129
    $comboBoxDR.Location = $System_Drawing_Point
    $comboBoxDR.Name = "comboBoxDR"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 21
    $System_Drawing_Size.Width = 200
    $comboBoxDR.Size = $System_Drawing_Size
    $comboBoxDR.TabIndex = 17
    $comboBoxDR.Text = "Selectionnez la délégation ici"
    
    $form1.Controls.Add($comboBoxDR)
    
    $comboBoxFonction.DataBindings.DefaultDataSourceUpdateMode = 0
    $comboBoxFonction.FormattingEnabled = $True
    $comboBoxFonction.Items.Add("INSPECTEUR")|Out-Null
    $comboBoxFonction.Items.Add("TECHNICIEN")|Out-Null
    $comboBoxFonction.Items.Add("SEDENTAIRE SUR POSTE WYSE")|Out-Null
    $comboBoxFonction.Items.Add("SEDENTAIRE SUR PC PORTABLE")|Out-Null
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 203
    $comboBoxFonction.Location = $System_Drawing_Point
    $comboBoxFonction.Name = "comboBoxFonction"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 21
    $System_Drawing_Size.Width = 206
    $comboBoxFonction.Size = $System_Drawing_Size
    $comboBoxFonction.TabIndex = 15
    $comboBoxFonction.Text = "Selectionnez la fonction ici"
    $comboBoxFonction.add_SelectedIndexChanged($handler_comboBox2_SelectedIndexChanged)
    
    $form1.Controls.Add($comboBoxFonction)
    
    $labelDR.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 316
    $System_Drawing_Point.Y = 97
    $labelDR.Location = $System_Drawing_Point
    $labelDR.Name = "labelDR"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 100
    $labelDR.Size = $System_Drawing_Size
    $labelDR.TabIndex = 14
    $labelDR.Text = "Délégation:"
    
    $form1.Controls.Add($labelDR)
    
    $textBoxMatricule.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 318
    $System_Drawing_Point.Y = 282
    $textBoxMatricule.Location = $System_Drawing_Point
    $textBoxMatricule.Name = "textBoxMatricule"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 20
    $System_Drawing_Size.Width = 200
    $textBoxMatricule.Size = $System_Drawing_Size
    $textBoxMatricule.TabIndex = 12
    $textBoxMatricule.Text = "Editez le matricule CCMX à 4 chiffres ici"
    
    $form1.Controls.Add($textBoxMatricule)
    
    $labelFonction.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 171
    $labelFonction.Location = $System_Drawing_Point
    $labelFonction.Name = "labelFonction"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 100
    $labelFonction.Size = $System_Drawing_Size
    $labelFonction.TabIndex = 11
    $labelFonction.Text = "Fonction:"
    
    $form1.Controls.Add($labelFonction)
    
    $labelMatricule.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 318
    $System_Drawing_Point.Y = 255
    $labelMatricule.Location = $System_Drawing_Point
    $labelMatricule.Name = "labelMatricule"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 200
    $labelMatricule.Size = $System_Drawing_Size
    $labelMatricule.TabIndex = 10
    $labelMatricule.Text = "Matricule CCMX pour les CDD/CDI:"
    
    $form1.Controls.Add($labelMatricule)
    
    $labelNom.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 32
    $labelNom.Location = $System_Drawing_Point
    $labelNom.Name = "labelNom"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 33
    $labelNom.Size = $System_Drawing_Size
    $labelNom.TabIndex = 9
    $labelNom.Text = "Nom:"
    
    $form1.Controls.Add($labelNom)
    
    $comboBoxContrat.DataBindings.DefaultDataSourceUpdateMode = 0
    $comboBoxContrat.FormattingEnabled = $True
    $comboBoxContrat.Items.Add("INTERIM")|Out-Null
    $comboBoxContrat.Items.Add("CDD")|Out-Null
    $comboBoxContrat.Items.Add("CDI")|Out-Null
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 123
    $comboBoxContrat.Location = $System_Drawing_Point
    $comboBoxContrat.Name = "comboBoxContrat"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 21
    $System_Drawing_Size.Width = 206
    $comboBoxContrat.Size = $System_Drawing_Size
    $comboBoxContrat.TabIndex = 8
    $comboBoxContrat.Text = "Selectionnez un type de contrat"
    
    $form1.Controls.Add($comboBoxContrat)
    
    $labelContrat.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 97
    $labelContrat.Location = $System_Drawing_Point
    $labelContrat.Name = "labelContrat"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 89
    $labelContrat.Size = $System_Drawing_Size
    $labelContrat.TabIndex = 7
    $labelContrat.Text = "Type de contrat:"
    
    $form1.Controls.Add($labelContrat)
    
    $labelPrenom.DataBindings.DefaultDataSourceUpdateMode = 0
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 316
    $System_Drawing_Point.Y = 32
    $labelPrenom.Location = $System_Drawing_Point
    $labelPrenom.Name = "labelPrenom"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 53
    $labelPrenom.Size = $System_Drawing_Size
    $labelPrenom.TabIndex = 4
    $labelPrenom.Text = "Prenom:"
    
    $form1.Controls.Add($labelPrenom)
    
    $textBoxPrenom.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 316
    $System_Drawing_Point.Y = 58
    $textBoxPrenom.Location = $System_Drawing_Point
    $textBoxPrenom.Name = "textBoxPrenom"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 20
    $System_Drawing_Size.Width = 206
    $textBoxPrenom.Size = $System_Drawing_Size
    $textBoxPrenom.TabIndex = 3
    $textBoxPrenom.Text = "Editez le Prénom ici"
    
    $form1.Controls.Add($textBoxPrenom)
    
    $textBoxNom.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 23
    $System_Drawing_Point.Y = 58
    $textBoxNom.Location = $System_Drawing_Point
    $textBoxNom.Name = "textBoxNom"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 20
    $System_Drawing_Size.Width = 206
    $textBoxNom.Size = $System_Drawing_Size
    $textBoxNom.TabIndex = 2
    $textBoxNom.Text = "Editez le Nom ici"
    
    $form1.Controls.Add($textBoxNom)
    
    #endregion Generated Form Code
    
    #Save the initial state of the form
    $InitialFormWindowState = $form1.WindowState
    #Init the OnLoad event to correct the initial state of the form
    $form1.add_Load($OnLoadForm_StateCorrection)
    #Show the Form
    $form1.ShowDialog()| Out-Null
    
    } #End Function
    
    #Call the Function
    GenerateForm




    mercredi 13 mai 2015 12:07
  • Rassure moi, le code graphique a été généré par un outil tiers?

    Si ce n'est pas le cas, je te suggère

    • de t’intéresser au concept de Layout (GridLayout par exemple), pour pouvoir placer et redimensionner tes objets automatiquement
    • de créer des fonctions spécifiques pour la création des composants graphiques qui réutilisent toujours les mémés paramètres, par exemple

    function New-Label {

    Param (

    [Parameter(Mandatory=$true)]

    $text

    ) $tmp =  New-Object System.Windows.Forms.Label $tmp.name = $text

    $tmp.text = $text

    return $tmp }


    Sinon comme le dit Laurent fort à propos, tu ne reset jamais $script:flag1 à 0, donc une fois une erreur commise, tu ne peux que relancer le script.


    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr


    • Modifié Bruce JDC mercredi 13 mai 2015 12:52
    mercredi 13 mai 2015 12:52
  • Exact Bruce JDC le code graphique à été généré automatiquement par un outil tiers, je doit bien admettre que cela rend la visibilité assez chaotique.

    Concernant le Flag, une fois une erreur détectée mon but est de revenir au début de mon script, donc la réinitialisation n'est pas forcément nécessaire, j'essaierai tout de même d'optimiser.

    mercredi 13 mai 2015 13:00
  • Ajoute ceci au début de la méthode CreationCompte :

    function CreationCompte {

    Write-warning "Create compte: $script:flag1"

    On constates que le flag reste à 1 après le premier appel, ce qui fait que l'affichage du message d'erreur ne se fait qu'une seul fois.

    De plus dans la fonction Error, c'est à l'utilisateur d’interpréter le message d'erreur $message_Out.

    Avec cette autre technique l'utilisateur visualise les composants comportant des informations erronées ou manquantes.



    Beatus, qui prodest, quibus potest.

    mercredi 13 mai 2015 13:15
    Modérateur
  • Bruce,

    if($Ret == DialogResult.OK){$Flag = 0}

    Si je ne me trompe pas c'est du c: ,

    Cela donnerait quoi en powershell j'ai testé ça sans résultat :

    if($Ret -eq [Windows.Forms.DialogResult]::OK){$Flag = 0}


    • Modifié Herve31 mercredi 13 mai 2015 14:27
    mercredi 13 mai 2015 14:27
  • C'est une MessageBox, donc une form modal disposant uniquement du bouton OK : elle bloque l'utilisateur tant qu'elle est ouverte, et le seul retour possible est "OK".

    Dans le contexte de ce script, le fait d'afficher la MessageBox bloque l’exécution du script tant qu'elle est ouverte, il n'y a donc pas réellement besoin d'un flag car il ne peut pas y avoir 2 MessageBox ouverte pour le même script. Par contre deux scripts différents peuvent ouvrir chacun une messagebox.

    Je simplifierais la fonction pour la généraliser (si vous avez d'autres usage d'une messagebox erreur)

    function Error {

    Param(

    [Parameter(Mandatory=$true)]

    [String] $msg

    )

    [System.Windows.Forms.MessageBox]::Show($msg, "Erreur" , 0, 16) # l'utilisateur a fermé la MessageBox }

    Erreur("Un ou plusieurs champs sont manquants ou incorrects")


    Pour le bout de code en lui meme, c'est encore un probleme de scope, vous écrivez $Flag = 0 dans le scope de la fonction, ce qui veut dire que la variable dans le scope du script garde son ancienne valeur. Je pense que vous devriez trouver de la lecture sur la notion de Scope en programmation :)

    Ex : https://technet.microsoft.com/en-us/library/hh847849.aspx

    Pour simplifier : lorsqu'une variable est définie dans un scope, puis manipuler dans un scope enfant comme une fonction, par défaut vous manipulez une copie de la variable. Il faut explicitement indiquer le scope parent si on veut modifier celle-ci.

    Par l'exemple :

    function a1 { $a = 1 ; write-Host "Dans A1 : `$a = $a mais `$Script:a = $script:a"}
    function a2 { $script:a = 2 ; write-Host "Dans A2 : `$a = $a et `$Script:a = $script:a"}
    
    $a =0
    a1
    a2


    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr



    • Modifié Bruce JDC mercredi 13 mai 2015 15:27
    mercredi 13 mai 2015 15:20
  • Je me suis rendu compte de mon problème de scope avant de lire votre réponse :)

    En ce qui concerne le Flag je l'initialise désormais dans la fonction "mère" de ma fonction "erreur" , ce qui résoud mon problème.

    Mon message d'erreur s'affiche désormais à chaque appel si il à lieu de s'afficher.

    Je vais creuser et analyser toutes vos remarques très instructives sur mon code, mais la raison 1ere de mon post est désormais réglée.

    J'ai encore pas mal de questions et de problèmes à résoudre, je vais essayer d'y réfléchir un peu avant de solliciter vos compétences. :)


    • Modifié Herve31 mercredi 13 mai 2015 15:40
    mercredi 13 mai 2015 15:39