Question [Convert-Form][V1.0]Prochaine version

Plus d'informations
il y a 16 ans 9 mois #4705 par Laurent Dardenne
Je suis entrain d'améliorer le script de conversion d'un source C# Winform vers PowerShell.
Si vous avez des remarques ou besoins particuliers faites-le moi savoir.

V 1.0 (28/03/09) (Laurent Dardenne):
- Corrections :
Le drag and drop n'est pas possible. Si un composant déclare AllowDrop=$true l'appel à $Form1.ShowDialog() déclenchera une exception.
System.InvalidOperationException: Échec de l'inscription DragDrop.
---> System.Threading.ThreadStateException: Le thread actuel doit être en mode STA (Single Thread Apartment) avant que
des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute.
Dans ce cas le script s'arrête sur une erreur grave.

La fonctionnalité de saisie semi-automatique pour les contrôles ComboBox, TextBox et ToolStripTextBox doit être désactivée. Problème due au mode STA.


- Ajout :
De la prise en charge du ou des composants ErrorProvider
Du switch -HideConsole. Prise en charge de l'appel à Hide-PSWindow permettant de cacher la fenêtre de la console PowerShell
pendant l'exécution de la form. La console PowerShell est réaffichée en fin de script.
Code généré :


$Form1.Add_Shown({Hide-PowerShell;$Form1.Activate()})
$Form1.ShowDialog()
#Libération des ressources
$Form1.Dispose()
Show-PowerShell
Les fonctions utilisées pour la prise en charge de Hide-PSWindow sont regroupées dans le fichier Initialize-HideForm.ps1.
L'usage simultané des switchs DontLoad et HideConsole générera un warning.

Du switch -AddInitialize. Insertion de l'appel préalable au fichier APIWindows.ps1 contenant les fonctions Hide-PSWindow et Show-PsWindow.
Le switch -HideConsole doit être également précisé pour activer cette insertion.
Du switch -STA. Autorise les composants nécessitant le modéle de thread STA. Dans ce cas on insére dans le script généré,
un test de contrôle sur l'état de cloisonnement du thread courant.
voir msdn.microsoft.com/fr-fr/library/system....entstate(VS.80).aspx et
support.microsoft.com/kb/150777

En mode debug, ($DebugPreference -ne \"SilentlyContinue\") on sauvegarde désormais dans un fichier temporaire unique le contenu de
la collection de lignes en cours d'analyse


- Modifications :
Du code de libération des ressources ( $reader.Close()) se fait désormais avant l'appel à $Form.ShowDialog.
Du message d'erreur en cas de nom de form introuvable dans le fichier source C#.
Si le nom du fichier ne se termine pas par \".Designer.cs\", on précise qu'il ne semble pas provenir du Designer de Visual Studio.

Je dois encore le tester avant de le mettre en ligne.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 6 mois #5278 par Laurent Dardenne
Je pense proposer la dernière version dans ces prochains jours.
En utilisant le cmdlet Invoke-Apartment on peut exécuter le script de la fenêtre dans le modèle de thread STA, ce qui permet l'usage :
-de la complétion sur certains composants
-du DragAndDrop entre la fenêtre et d'autres composants/applications (Explorer par exemple)

Je suis en train de regrouper une bonne partie des scripts proposés sur ce forum au sein d'un projet unique. J'en profiterais pour créer des projets de démo autour des Winforms.
J'ai intégré la génération d'appel de la form au sein d'un Runspace, reste à le tester en couplant son usage avec le cmdlet Invoke-Apartment :silly:


Evolutions depuis la V0.91

V 1.0 (09/09/09) (Laurent Dardenne):
- Ajout :
Le header du script cible contient la ligne d'appel et le numéro de version de PS utilisé pour le générer
On reçoit la valeur de retour dans la variable $ModalResult=$Form.ShowDialog()
Refonte du texte d'aide affiché si aucun paramètre n'est spécifié.
Des fonctions PackageScripts.Get-psVersion et PackageScripts.Import-LocalizedData
De traces supplémentaires en mode Debug.
Du switch InvokeInRunspace, génére le code d'appel de la fenêtre dans un runspace
Du switch passThru, on émet le nom du fichier Destination dans le pipeline

De la prise en charge du ou des composants ErrorProvider.
Du switch -HideConsole. Prise en charge de l'appel à Hide-PSWindow permettant de cacher la fenêtre de la console
PowerShell pendant l'exécution de la form. La console PowerShell est réaffichée en fin de script.
Code généré :


$Form1.Add_Shown({Hide-PowerShell;$Form1.Activate()})
$Form1.ShowDialog()
#Libération des ressources
$Form1.Dispose()
Show-PowerShell
Nouveau script contenant les fonctions utilisées pour la prise en charge de Hide-PSWindow : APIWindows.ps1
L'usage simultané des switchs DontLoad et HideConsole générera un warning.

Du switch -AddInitialize. Insertion de l'appel préalable au fichier APIWindows.ps1 contenant les fonctions
Hide-PSWindow et Show-PsWindow.
Le switch -HideConsole doit être également précisé pour activer cette insertion.

Du switch -STA. Autorise les composants nécessitant le modéle de thread STA. Dans ce cas on insére,
dans le script généré, un test de contrôle sur l'état de cloisonnement du thread courant.
voir msdn.microsoft.com/fr-fr/library/system....entstate(VS.80).aspx et
support.microsoft.com/kb/150777

En mode debug, ($DebugPreference -ne \"SilentlyContinue\") on sauvegarde désormais dans des fichiers temporaire
unique le contenu de la collection de lignes en cours d'analyse (3 passes).

- Modifications :
Le switch -Force remplace -Confirm. Désormais par défaut on demande une confirmation si le fichier destination existe.
Si on précise -Force on écrase le fichier sans demander de confirmation.
C'est l'approche standard des cmdlets.
Les fonctions MessageConfirmation et MessageInformation sont remplacées par la fonction Show-MessageBox
On clôt l'objet resource avant l'appel à Showdialog()
PackageConvert-Form.Add-SpecialEventForm génére l'appel \"Hide-PSWindow;\" dans l'eventhandler $Form1.Add_Shown
Migrations des projets Winform utilisées pour les tests vers VS2008. Pour le moment, pas de changement constatés
entre le designer 2005 et 2008.
Il n'est plus nécessaire de préciser le fichier Destination, dans ce cas on construit le fichier cible à partir du fichier source.
Du code de libération des ressources ( $reader.Close()) se fait désormais avant l'appel à $Form.ShowDialog.
Du message d'erreur en cas de nom de form introuvable dans le fichier source C#.
Si le nom du fichier ne se termine pas par \".Designer.cs\", on précise qu'il ne semble pas provenir du
Designer de Visual Studio.

- Corrections :
La signature des fonctions( eventhandler) n'a pas besoin de préciser la signature ($Sender,$e),
les arguments référencés sont $this et $_, les seuls paramètres reconnus au sein d'un eventhandler.
Une fonction est aussi un scriptblock : (dir function:maFonction).ScriptBlock
Gestion des possibles erreurs suivantes :
le fichier source est verrouillé
le disque cible est plein
les packages nécessaire ne sont pas signés (Set-ExecutionPolicy AllSigned)
La gestion des noms de fichiers a été renforcé, globbing, test du provider courant,...
Certaines combinaisons de switch étaient conflictuelles.
Si l'extension du fichier Destination n'est pas précisé on ajoute .PS1, s'il elle n'est pas .PS1
on émet un warning.
Le drag and drop n'est pas possible. Si un composant déclare AllowDrop=$true l'appel à $Form1.ShowDialog()
déclenchera une exception.
System.InvalidOperationException: Échec de l'inscription DragDrop.
---> System.Threading.ThreadStateException: Le thread actuel doit être en mode STA (Single Thread Apartment)
avant que des appels OLE puissent être effectués.
Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute.
Dans ce cas le script s'arrête sur une erreur grave.
L'utilisation du nouveau switch -STA combiné avec le cmdlet Invoke-Apartement rend posible l'usage du drag and drop

La fonctionnalité de saisie semi-automatique pour les contrôles ComboBox, TextBox et ToolStripTextBox doit
être désactivée. Problème du au mode STA.
L'utilisation du nouveau switch -STA combiné avec le cmdlet Invoke-Apartement rend posible l'usage du drag and drop

- Suppression :
de la fonction PackageScripts.IsAssemblyLoaded

<br><br>Message édité par: Laurent Dardenne, à: 9/09/09 15:47

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 6 mois #5299 par Laurent Dardenne
La dernière version est disponible ici .

Tutoriels PowerShell

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

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