Question Utilisation du System.Windows.Forms.ErrorProvider

Plus d'informations
il y a 17 ans 4 jours #4354 par Jno
Bonjour,

Avant de commencer, je tiens à vous féliciter pour ce site qui aide énormément la communauté PowerShell et j'espère que cela deviendra une référence en la matière.

Je vous explique mon problème,j'essaie dans mon script d'utiliser ce composant pour me permettre de catcher les erreurs et les afficher dans un message box.

Voici la déclaration :
[code:1] #~~< components >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$components = New-Object System.ComponentModel.Container
#~~< ErrorProvider1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$gestErreur = New-Object System.Windows.Forms.ErrorProvider($components)
$gestErreur.ContainerControl = $fenPrincipale
[/code:1]

Voici l'utilisation (en sachant que $txtFicExcel est censé representer ma textbox qui contient le nom du fichier :
[code:1] if($oFileDialog.ShowDialog() -eq \"OK\"«»)
{
$sFile = $oFileDialog.FileName
$sExt = [System.IO.Path]::GetExtension($sFile);
if ($sFile -eq \".xls\"«») {
$txtFicExcel.Text = $sFile
}
else
{
$gestErreur.SetError ([System.Windows.Forms.Control]$txtFicExcel,\"Please enter your Name\"«»);
}

}
[/code:1]

Le problème est qu'il n'arrive pas à me reconnaître le premier argument [System.Windows.Forms.Control]$txtFicExcel (erreur : Jeton « ( » inattendu dans une expression ou une instruction.)

Auriez-vous une idée du pourquoi?

Merci d'avance pour votre aide.

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

Plus d'informations
il y a 17 ans 4 jours #4356 par Laurent Dardenne
Jno écrit:

Le problème est qu'il n'arrive pas à me reconnaître le premier argument

Peut être lui manque-t-il un couple de parenthèses ?
Que donne l'appel avec uniquement le nom de la variable contenant le textbox ?
Et que donne ceci :
[code:1]$gestErreur.SetError (($txtFicExcel -as [System.Windows.Forms.Control]),\"...[/code:1]
Jno écrit:

Auriez-vous une idée du pourquoi?

Sans code de test difficile de répondre, mais le système de type est parfois particulier sous PowerShell.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 4 jours #4358 par Jno
Merci pour cette réponse rapide.

J'ai essayé ce que vous m'avez donné mais en vain c'est toujours la même erreur.

J'ai essayé avec uniquement le nom de la variable mais cela ne fonctionne pas.

Ayant cherché sur Internet j'ai l'impression que personne ne l'utilise en powershell.

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

Plus d'informations
il y a 17 ans 4 jours #4359 par Laurent Dardenne
Jno écrit:

j'ai l'impression que personne ne l'utilise en powershell.

C'est ce que je me suis dit en voyant le titre :ohmy:
Je ne souviens plus si j'avais testé ce composant lors du développment du convertisseur de form C# en un script PS.
Si tu as un exemple de test à proposer, je veux bien regarder d'un peu plus près.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 3 jours #4360 par Laurent Dardenne
Comme c'est un composant important pour une interface graphique j'ai effectué quelques tests avec le script Convert-Form. Ce composant est pris en, charge mais nécessite qq modifications.

Bref, de mon coté je n'ai aucune erreur avec les syntaxes citées avec la V1.
Un exemple complet, le premier textbox doit contenir du texte pouvant être converti en un entier positif.
le second textbox n'a pas de contrainte de validation.
[code:1]
################################################################################
#
# Nom : TestErrorProvider.ps1
# Version : 0.1
# Auteur :
# Date : le 17/03/2009
@\"
Historique :
(Soit substitution CVS)
$Log$
(soit substitution SVN)
$LastChangedDate$
$Rev$
\"@>$Null
#
################################################################################

# Chargement des assemblies externes
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Drawing\"«»)

$components = new-object System.ComponentModel.Container
$btnClose = new-object System.Windows.Forms.Button
$TxtBoxSaisirNombre = new-object System.Windows.Forms.TextBox
$errorProvider1 = new-object System.Windows.Forms.ErrorProvider($components)
$lblSaisirNombre = new-object System.Windows.Forms.Label
$textBox1 = new-object System.Windows.Forms.TextBox
$lblAllText = new-object System.Windows.Forms.Label
#
# btnClose
#
$btnClose.Location = new-object System.Drawing.Point(183, 203)
$btnClose.Name = \"btnClose\"
$btnClose.Size = new-object System.Drawing.Size(60, 26)
$btnClose.TabIndex = 0
$btnClose.Text = \"Close\"
$btnClose.UseVisualStyleBackColor = $true
function OnClick_btnClose($Sender,$e){
$Form1.Close()
}

$btnClose.Add_Click( { OnClick_btnClose $btnClose $EventArgs} )
#
# TxtBoxSaisirNombre
#
$TxtBoxSaisirNombre.Location = new-object System.Drawing.Point(12, 65)
$TxtBoxSaisirNombre.Name = \"TxtBoxSaisirNombre\"
$TxtBoxSaisirNombre.Size = new-object System.Drawing.Size(220, 20)
$TxtBoxSaisirNombre.TabIndex = 1
function OnEnter_TxtBoxSaisirNombre($Sender,$e){
#Evénement déclenché lorsque le composant devient le controle actif de la form.

#Désactive l'icone d'erreur s'il est présent
$errorProvider1.SetError($TxtBoxSaisirNombre, \"\"«»)
}

$TxtBoxSaisirNombre.Add_Enter( { OnEnter_TxtBoxSaisirNombre $TxtBoxSaisirNombre $EventArgs} )
function OnValidating_TxtBoxSaisirNombre($Sender,$e){
#Evénement déclenché lors de la validation, dés que le composant perd le focus.

trap [System.FormatException]
{
#Active l'icone d'erreur en cas d'erreur de conversion d'un texte en un entier
$errorProvider1.SetError($TxtBoxSaisirNombre, \"Le texte saisie n'est pas un nombre.\"«»)
Continue
}
#Parse le texte saisie
[int32] $x = [Int32]::«»Parse($TxtBoxSaisirNombre.Text)
}

$TxtBoxSaisirNombre.Add_Validating( { OnValidating_TxtBoxSaisirNombre $TxtBoxSaisirNombre $EventArgs} )
# lblSaisirNombre
#
$lblSaisirNombre.AutoSize = $true
$lblSaisirNombre.Location = new-object System.Drawing.Point(12, 49)
$lblSaisirNombre.Name = \"lblSaisirNombre\"
$lblSaisirNombre.Size = new-object System.Drawing.Size(109, 13)
$lblSaisirNombre.TabIndex = 2
$lblSaisirNombre.Text = \"&Saisissez un nombre :\"
#
# textBox1
#
$textBox1.Location = new-object System.Drawing.Point(12, 120)
$textBox1.Name = \"textBox1\"
$textBox1.Size = new-object System.Drawing.Size(220, 20)
$textBox1.TabIndex = 3
#
# lblAllText
#
$lblAllText.AutoSize = $true
$lblAllText.Location = new-object System.Drawing.Point(12, 104)
$lblAllText.Name = \"lblAllText\"
$lblAllText.Size = new-object System.Drawing.Size(116, 13)
$lblAllText.TabIndex = 4
$lblAllText.Text = \"Saisie sans contrainte :\"
#
$Form1 = new-object System.Windows.Forms.form
#
# errorProvider1
#
$errorProvider1.ContainerControl = $Form1
#
#
$Form1.ClientSize = new-object System.Drawing.Size(292, 266)
$Form1.Controls.Add($lblAllText)
$Form1.Controls.Add($textBox1)
$Form1.Controls.Add($lblSaisirNombre)
$Form1.Controls.Add($TxtBoxSaisirNombre)
$Form1.Controls.Add($btnClose)
$Form1.Name = \"Form1\"
$Form1.Text = \"Form1\"
function OnFormClosing_Form1($Sender,$e){
# $this est égal au paramètre sender (object)
# $_ est égal au paramètre e (eventarg)

# Déterminer la raison de la fermeture :
# if (($_).CloseReason -eq [System.Windows.Forms.CloseReason]::UserClosing)

#Autorise la fermeture
($_).Cancel= $False
}
$Form1.Add_FormClosing( { OnFormClosing_Form1 $Form1 $EventArgs} )
$Form1.Add_Shown({$Form1.Activate()})
$Form1.ShowDialog()
#Libération des ressources
$Form1.Dispose()

[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 3 jours #4363 par Jno
Bonjour Laurent,

Je te remercie beaucoup pour ce code je vais essayer de l'adapter car je trouve ce composant assez sympa à utiliser.

Merci en tout cas pour le temps que tu m'as consacré, je te tiens au courant si ca marche de mon coté :)

Bonne journée.

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

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