none
comment charger la liste des ressources d'un formulaire. RRS feed

  • Question

  • bonjours tt le monde

    je dirai que vb6 nous simplifiait mieux la vie en tant que programmeur debutant. et definissant par l'assitant la procedure "Sub LoadResStrings(frm As Form)"

    je suis passé a vb2008 et je ne trouve plus comment charger la liste des ressource d'un formulaires, j'ai crée une procedure similaire à VB6, mais le probleme persiste avec le Menustrip,

    la question claire ici est comment acceder en un seul coup For ... each, ou for comp = 1 to menu-count a tous les element d'un menustrip.

    la procedure que j'aime créer a a peu pres cet aspect (incomplete); remarquer qu'elle utilise une structure imbriquée

     

     

    Public Sub LoadFrmRess(ByRef ContainerCtl As Object)

     

    'On Error Resume Next

     

    Dim MyCtl As Object

     

    Dim MnuCtl As Object

     

    For Each MyCtl In ContainerCtl.Controls

     

    If MyCtl.controls.count > 0 Then LoadFrmRess(MyCtl)

     

    Select Case TypeName(MyCtl)

     

    Case "Panel"

     

    Case "MenuStrip"

     

    For Each MnuCtl In MyCtl.mdiwindowlistitems (c'est ici le probleme quel collection utiliser)

    MnuCtl.text = LoadResStr(MnuCtl.tag)

     

    Next

     

    Case "Panel"

     

    Case "Panel"

     

    End Select

    MyCtl.Text = LoadResStr(MyCtl.Tag)

     

    Next

     

    End Sub

    lundi 28 juin 2010 20:26

Réponses

  • Bonjour,

    Utilisez le code suivant qui devrait initialiser de manière récursive vos Tag.

    Public Sub LoadFrmRess(ByVal ContainerCtl As Control)
    
      ContainerCtl.Tag = ContainerCtl.Text
    
      For Each MyCtl As Control In ContainerCtl.Controls
    
        Dim ts As ToolStrip
    
        ts = TryCast(MyCtl, ToolStrip)
    
        If Not ts Is Nothing Then
          ts.Tag = ts.Text
          LoadFrmRess(ts)
        Else
          LoadFrmRess(MyCtl)
        End If
    
    
      Next
    End Sub
    
    Public Sub LoadFrmRess(ByVal items As ToolStripItemCollection)
    
      For Each item As ToolStripItem In items
    
        item.Tag = item.Text
    
        Dim itemDropDown As ToolStripDropDownItem
    
        itemDropDown = TryCast(item, ToolStripDropDownItem)
    
        If Not itemDropDown Is Nothing Then
          LoadFrmRess(itemDropDown.DropDownItems)
        End If
    
      Next
    End Sub

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Proposé comme réponse Alex Petrescu mercredi 30 juin 2010 10:18
    • Marqué comme réponse Alex Petrescu lundi 5 juillet 2010 08:22
    mardi 29 juin 2010 06:56
    Modérateur

Toutes les réponses

  • Bonjour,

    Utilisez le code suivant qui devrait initialiser de manière récursive vos Tag.

    Public Sub LoadFrmRess(ByVal ContainerCtl As Control)
    
      ContainerCtl.Tag = ContainerCtl.Text
    
      For Each MyCtl As Control In ContainerCtl.Controls
    
        Dim ts As ToolStrip
    
        ts = TryCast(MyCtl, ToolStrip)
    
        If Not ts Is Nothing Then
          ts.Tag = ts.Text
          LoadFrmRess(ts)
        Else
          LoadFrmRess(MyCtl)
        End If
    
    
      Next
    End Sub
    
    Public Sub LoadFrmRess(ByVal items As ToolStripItemCollection)
    
      For Each item As ToolStripItem In items
    
        item.Tag = item.Text
    
        Dim itemDropDown As ToolStripDropDownItem
    
        itemDropDown = TryCast(item, ToolStripDropDownItem)
    
        If Not itemDropDown Is Nothing Then
          LoadFrmRess(itemDropDown.DropDownItems)
        End If
    
      Next
    End Sub

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Proposé comme réponse Alex Petrescu mercredi 30 juin 2010 10:18
    • Marqué comme réponse Alex Petrescu lundi 5 juillet 2010 08:22
    mardi 29 juin 2010 06:56
    Modérateur
  • Bonjour,

     

    Merci M. Tourreau pour cet exemple de code. Fekiri, je vous prie de nous annoncer si vous avez d’autres problèmes avec votre projet ou si vous avez besoin d’aide supplémentaire.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    mercredi 30 juin 2010 10:17
  • Merci a vous tous Gilles Tourreau et Alex Petrescu, avant meme que je vois le code c vraiment tres gentil de votre part.

    pour le moment j'avance bien. je suis entrain de construire une application pour gestion de Stock et de preparation de Production, je suis sure que j'aurai bien tot besoin a votre aide alors merci encore et encore. et bonne journée...

     

    mercredi 30 juin 2010 17:09
  • Bonsoir A tous

    Bon le code ne fonctionne pas comme je cherche

    je pense que j'ai mal exposé ma question, pourtant elle est simple

    j'aime faire une application multilanguage. "Francais, allemand..."

    pour cela je doit charger les Texte dans les labels, les treeview, lesmenu selon la language utilisée. par la fonction suivante je lit dans un fichier texte qui contien tt les texte avec une numero qui est affecté egalement au Tag du controle:

     

    Private Function LoadResStr(ByVal Rang As String) As String

     

       Dim MyLine As String

     

       Dim LanguageConst As Long

     

       Dim RessourcenFolder As String = "D:\VB\log\logica\Ress\"

       Rang = Rang + LanguageConst

       FileOpen(1, RessourcenFolder &

    "StringRes.mwl", OpenMode.Input)

     

       Do While Not EOF(1)

           MyLine = LineInput(1)

     

           If Val(Microsoft.VisualBasic.Left(MyLine, 5)) = Rang Then

              LoadResStr = Microsoft.VisualBasic.Right(MyLine, Len(MyLine) - 5)

              FileClose(1)

     

              Exit Function

     

           End If

     

       Loop

       FileClose(1)

       LoadResStr = vbNullString

     

    End Function

    il ya un autre procedure (a crée) qui pour chaque element (label menu...)  appelle cette fontion de la facon suivante :

         For each Mycontrol in Me.Controls

            MyControl.text = Loadress (MyControl.Tag )

         next

    alors si j'ai un formulaire avec des control et un Menustrip comment acceder a tout les elements de ce formulaire pour les assigner le texte suivant leurs tags

    Et merci encore

    mercredi 30 juin 2010 21:47
  • et dites moi SVP comment modifier la police pour afficher un texte plus clair sur ce forum...
    mercredi 30 juin 2010 21:50
  • Bonjour,

    j'aime faire une application multilanguage. "Francais, allemand..."
    Pas besoin de programmation, sous le .NET Framework c'est déjà prévu ! Dans votre fenêtre, définissez la propriété Localizable = True. Ensuite, mettez vos libellé...etc dans la langue par défaut.

    Si vous voulez traduire votre application en Anglais, dans les proipriétés de la fenêtre, sélectionnez la langue en question "Language". Traduisez vous libellé,...tc. Faites cette opération pour chaque langue...

    Pour plus d'informations, consultez le lien suivant : http://msdn.microsoft.com/fr-fr/library/9xdxwwkc.aspx

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 1 juillet 2010 06:48
    Modérateur