Question [RESOLU]Formulaires .net et powershell

Plus d'informations
il y a 2 ans 9 mois - il y a 10 mois 2 semaines #31028 par Percival
Bonjour à tous, je voudrais savoir comment passer en paramètres dans des fonctions externes les données de formulaires windows forms .
Je n'ai aucun soucis lorsque les fonctions sont incluses dans le script principal, par contre je n'arrive pas à trouver comment accéder aux infos de mes formulaires dans une fonction externe .
Par exemple si j'ai un formulaire principal $main_form j'arrive à tout avoir en passant $main_form.Controls à ma fonction, mais si je veux accéder par exemple à TextBox1 dans ma fonction, je n'y arrive pas à y accéder simplement comme on le fait en temps normal .
Exemple :
$NewComputerChampPage = New-Object System.Windows.Forms.TextBox
 $NewComputerChampPage.DataBindings.DefaultDataSourceUpdateMode = 0
 $NewComputerChampPage.UseVisualStyleBackColor = $True
 $NewComputerChampPage.Text = 'Ordinateur'
  $NewComputerChampPage.BackColor = 'LightSkyBlue' 
  $main_form.Controls.Add( $NewComputerChampPage )  

$NewComputerChampPage2 = New-Object System.Windows.Forms.TextBox
 $NewComputerChampPage2.DataBindings.DefaultDataSourceUpdateMode = 0
 $NewComputerChampPage2.UseVisualStyleBackColor = $True
 $NewComputerChampPage2.Text = 'Adresse IP'
  $NewComputerChampPage2.BackColor = 'LightSkyBlue' 
  $main_form.Controls.Add( $NewComputerChampPage2 )

$NewComputerChampPage3 = New-Object System.Windows.Forms.TextBox
 $NewComputerChampPage3.DataBindings.DefaultDataSourceUpdateMode = 0
 $NewComputerChampPage3.UseVisualStyleBackColor = $True
 $NewComputerChampPage3.Text = 'Fabricant'
  $NewComputerChampPage3.BackColor = 'LightSkyBlue' 
  $main_form.Controls.Add( $NewComputerChampPage3 )  

Normalement j'accède aux champs de NewComputerChampPage comme ça $NewComputerChampPage.xxxx , mais comment faire dans une fonction externe ??

Edit: En passant $NewComputerChampPage en paramètres, ça marche, mais si j'ai un NewComputerchampPage2 par exemple, comment accéder aux 2 sans les passer tous les 2(car ça peut vite devenir lourd si on doit tout passer en paramètre) ??

Merci d'avance .
Dernière édition: il y a 10 mois 2 semaines par Percival.

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

Plus d'informations
il y a 2 ans 9 mois #31037 par Laurent Dardenne
Salut,
pas sûr de comprendre, mais essaie déjà l'ajout de la portée script: a ta variable pour vérifier.
>>car ça peut vite devenir lourd si on doit tout passer en paramètre
Sans le code complet sous les yeux, difficile à dire, Le pb de ton traitement est peut être dans le 'tout' que tu utilises dans ta phrase ...

Tutoriels PowerShell

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

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #31039 par Percival
Réponse de Percival sur le sujet Formulaires .net et powershell
Bonjour, je vais essayer de mieux expliquer .

J'utilise les windows forms pour créer un formulaire, le soucis c'est que j'ai des fonctions externes qui doivent avoir accès aux  champs, et je n'arrive pas à trouver un moyen simple de passer en paramètre le formulaire complet ,ou du moins certains parties pour y avoir accès sans avoir à passer chaque objet champs/Control aux fonctions
J'aimerai savoir si on peut passer par exemple le Control parent(je sais pas si c'est le bon terme) à une fonction pour avoir directement accès aux champs/Controls enfants($NewComputerTabPage,$NewComputerTabPage2 et $NewComputerTabPage3) sans passer tous mes objets champs mais juste $main_form.Controls par exemple  .
Donc actuellement je fais :
Ma_Fonction $NewComputerChampPage $NewComputerChampPage2 $NewComputerChampPage3

Ca,ça marche, mais si j'ai 50 champs par exemple, ça deviens compliqué .

Ps: J'ai édité le message original niveau exemple .
Dernière édition: il y a 2 ans 9 mois par Percival.

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

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #31040 par Percival
Réponse de Percival sur le sujet Formulaires .net et powershell
Je poste un exemple de code :
function Test( $FormGen ){
    $FormGen.Text
}

# Creation du formulaire
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = 'Intégration de postes'
    $Form.Size = New-Object System.Drawing.Size( 1000 , 550 )
    $Form.SizeGripStyle = 'Hide'    
    $Form.MaximizeBox = $false
    $Form.ShowIcon = $True
    $Form.ShowInTaskbar = $True
    $Form.TopMost = $True    
    
    $Form.StartPosition = "CenterScreen"

    # Create tab controls
    $TabControl = New-object System.Windows.Forms.TabControl
    $TabControl.DataBindings.DefaultDataSourceUpdateMode = 0
    $TabControl.Location = New-Object System.Drawing.Size( 10 , 10 )
    $TabControl.Size = New-Object System.Drawing.Size( 480 , 490 )
    $Form.Controls.Add( $TabControl )

    # Crée l'onglet "Nouvel Ordinateur"
    $NewComputerTabPage = New-Object System.Windows.Forms.TabPage
    $NewComputerTabPage.DataBindings.DefaultDataSourceUpdateMode = 0
    $NewComputerTabPage.UseVisualStyleBackColor = $True
    $NewComputerTabPage.Text = 'Ordinateur'
    $NewComputerTabPage.BackColor = 'LightSkyBlue' 
    $TabControl.Controls.Add( $NewComputerTabPage )  
        
    # Création du groupe infos ordinateur 
    $NewComputerInfoGroupBox = New-Object System.Windows.Forms.GroupBox
    $NewComputerInfoGroupBox.Location = New-Object System.Drawing.Size( 10, 10 )
    $NewComputerInfoGroupBox.Size = New-Object System.Drawing.Size( 450 , 125 )
    $NewComputerInfoGroupBox.Text = 'Informations Ordinateur'
    $NewComputerTabPage.Controls.Add( $NewComputerInfoGroupBox )           
    
    # Box nom Courant PC
    $OldComputerNameLabel_NewPage = New-Object System.Windows.Forms.Label
    $OldComputerNameLabel_NewPage.Location = New-Object System.Drawing.Size( 12 , 35 )
    $OldComputerNameLabel_NewPage.Size = New-Object System.Drawing.Size( 80 , 22 )
    $OldComputerNameLabel_NewPage.Text = 'Nom Actuel'
    $NewComputerInfoGroupBox.Controls.Add( $OldComputerNameLabel_NewPage )
    
    # Nom Actuel du poste text box
    $OldComputerNameTextBox_NewPage = New-Object System.Windows.Forms.TextBox
    $OldComputerNameTextBox_NewPage.ReadOnly = $True
    $OldComputerNameTextBox_NewPage.Location = New-Object System.Drawing.Size( 100 , 34 )
    $OldComputerNameTextBox_NewPage.Size = New-Object System.Drawing.Size( 120 , 20 )
    $OldComputerNameTextBox_NewPage.Text = "Ordi1"
    $NewComputerInfoGroupBox.Controls.Add( $OldComputerNameTextBox_NewPage ) 
    
    Test $OldComputerNameTextBox_NewPage
 
Donc ici si je veux afficher dans la fonction Test le champs Text de l'objet OldComputerNameTextBox_NewPage je passe l'objet en paramètre, ça marche,donc comment avoir accès à tous les objets du formulaire dans la fonction Test, simplement ??
Dernière édition: il y a 2 ans 9 mois par Laurent Dardenne. Raison: balise code

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

Plus d'informations
il y a 2 ans 9 mois #31045 par Laurent Dardenne
Oui on peut passer le contrôle parent en paramètre d'une fonction.
L'objet $Form contient la liste des controls (une imbrication de conteneur) :
 $Form.Controls.Add( $TabControl )
Voir :
docs.microsoft.com/fr-fr/dotnet/api/syst...rms_Control_Controls

docs.microsoft.com/fr-fr/dotnet/api/syst...iew=netframework-4.5

Si un traitement accède aux propriétés des objets en lecture seulement tu peux construire un objet personnalisé ( Get-FormDatas) et le passer en paramètre ainsi ton traitement sur les données n'a pas besoin de connaitre comment ta forme est structurée.

Tutoriels PowerShell

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

Plus d'informations
il y a 2 ans 9 mois #31046 par Percival
Réponse de Percival sur le sujet Formulaires .net et powershell
Merci pour l'info, je vais voir sur les liens .

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

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