none
Génération de contrôles par macro ou assistant RRS feed

  • Question

  • Bonjour.

     

    Avec Visual Studio 2005, j'aimerais pouvoir générer sur un formulaire existant un ensemble de contrôles; cet ensemble étant défini dans une base de données, un fichier de texte ou autre.

     

    Par exemple, j'ai un fichier texte "Personne.txt" qui contient les lignes suivantes :

    - Nom

    - Prénom

    - Date de naissance

     

    Je parcours ce fichier texte, et je voudrais générer sur mon formulaire un label et une textbox pour chacune des lignes.

    Dans mon exemple, j'aurais donc sur mon formulaire (une fois le "traitement" terminé) :

    un label "Nom" et une zone de saisie "TextBoxNom"

    un label "Prénom" et une zone de saisie "TextBoxPrénom"

    un label "Date de naissance" et une zone de saisie "TextBoxDateNaissance"

     

    1) Est-ce qu'il est possible de faire ca ? (je pense que oui, mais comme je connais pas bien les macros et assistants...)

    2) Si oui, mieux vaut utiliser une macro, un assistant ou un complément ? (une macro me semblait judicieuse)

     

    Dans mon idée, je pensais faire quelquechose comme ca :

    MonDocumentActif.Controls.Add(New Label())

    MonDocumentActif.Controls.Add(New TextBox())

     

    Trop simple ?

     

    Merci d'avance Smile

    vendredi 25 juillet 2008 08:47

Réponses

Toutes les réponses

  • Bonjour,

     

    Un outil personnalisé et du CodeDOM devrait faire l'affaire...

    Voici un très bon article (à vous de juger) qui devrait tout expliquer :

     

    http://gilles.tourreau.fr/dotnet/visual_studio/vs2005_2008_creation_dun_outil_personnalise_custom_tool.html

     

    Cordialement
    vendredi 25 juillet 2008 19:58
    Modérateur
  •  

    Article intéressant. Il faut que je regarde ca plus en détail.


    Merci

    lundi 28 juillet 2008 07:29
  • Hum... Plus ardu que ce que je pensais de prime abord...

     

    Si j'ai bien compris la finalité et pour "simplifier", je vais générer le code qui se trouve dans le fichier "Form1.Designer.vb".

     

    Par exemple (une simple Form avec une TextBox) :

    Code Snippet

    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _

    Partial Class Form1

    Inherits System.Windows.Forms.Form

    'Form remplace la m‚thode Dispose pour nettoyer la liste des composants.

    <System.Diagnostics.DebuggerNonUserCode()> _

    Protected Overrides Sub Dispose(ByVal disposing As Boolean)

    Try

    If disposing AndAlso components IsNot Nothing Then

    components.Dispose()

    End If

    Finally

    MyBase.Dispose(disposing)

    End Try

    End Sub

    'Requise par le Concepteur Windows Form

    Private components As System.ComponentModel.IContainer

    'REMARQUEÿ: la proc‚dure suivante est requise par le Concepteur Windows Form

    'Elle peut ˆtre modifi‚e … l'aide du Concepteur Windows Form.

    'Ne la modifiez pas … l'aide de l'‚diteur de code.

    <System.Diagnostics.DebuggerStepThrough()> _

    Private Sub InitializeComponent()

    Me.TextBox1 = New System.Windows.Forms.TextBox

    Me.SuspendLayout()

    '

    'TextBox1

    '

    Me.TextBox1.Location = New System.Drawing.Point(80, 112)

    Me.TextBox1.Name = "TextBox1"

    Me.TextBox1.Size = New System.Drawing.Size(128, 20)

    Me.TextBox1.TabIndex = 0

    '

    'Form1

    '

    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)

    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font

    Me.ClientSize = New System.Drawing.Size(292, 266)

    Me.Controls.Add(Me.TextBox1)

    Me.Name = "Form1"

    Me.Text = "Form1"

    Me.ResumeLayout(False)

    Me.PerformLayout()

    End Sub

    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox

    End Class

     

     

     

    Je dois générer ce code via l'outil que vous m'avez indiqué ?

    Pas sûr d'avoir bien saisi la chose...

     

    PS : je pars en congé, donc je ne pourrais pas répondre dans l'immédiat.

    vendredi 1 août 2008 16:28
  • Bonjour,

     

    Je viens de réaliser que la solution de l'outil personnalisé n'est pas adpaté dans votre cas...

     

    En effet, le but d'un outil personnalisé est de prendre un fichier source (XML, texte,...etc) et d'en générer un code source.

    Le gros problème, c'est qu'à chaque fois que le code source est généré (suite à une modif du fichier XML ou texte), le fichier .designer.vb est regénéré... Il ne sera donc pas possible de modifier votre fenêtre générée.

     

    Tout simplement, pourquoi ne pas créer un outil simple (voir un Add-In) qui prend en entrée votre fichier texte et qui génère à la fin du code VB pour votre fenêtre ?

     

    Cordialement

     

    mardi 12 août 2008 06:56
    Modérateur
  • Quelque chose dans ce genre ci (chapitre 4) :

    http://lgmorand.developpez.com/dotnet/vsaddin/

     

    Dans son exemple, il ajoute les balises #region et #end region au code sélectionné.

     

    Dans mon cas, il faudrait que je trouve la procédure InitializeComponent de mon formulaire et que j'ajoute :

    Me.TextBox1 = New System.Windows.Forms.TextBox

     

    Puis définir les propriétés de ma textbox. Et ainsi de suite pour mes autres contrôles.

     

    Est-ce là ce que vous suggérez ?

     

    Cdlt.

    vendredi 22 août 2008 14:49
  • Bonjour,

     

    Vous pouvez faire plus simple...

    Un add in qui génère les 2 fichiers nécessaire à la création d'une Form. (En respectant le même pattern que Visual Studio, avec le InitializeComponent()).

     

    Cordialement

     

    vendredi 22 août 2008 15:00
    Modérateur
  • En fin de compte, cela revient à générer du "texte".

    J'ai créé 2 fichiers ".txt" (Form2.txt et Form2.designer.txt)
    J'ai repris le code "standard" d'un autre formulaire.
    J'ai changé le nom de la classe (Form1 en Form2) dans mes nouveaux fichiers "source".
    J'ai changé les extensions en .vb.
    Enfin j'ai ajouté les fichiers à mon projet.

     

    Aussi simple que ca ?

    vendredi 22 août 2008 15:20
  • Bonsoir,

     

    Oui, c'est la solution la plus simple et la plus rapide à développer...

     

    Cordialement

     

    vendredi 22 août 2008 18:04
    Modérateur
  • D'accord.

     

    Merci pour tout.

     

    lundi 25 août 2008 07:20