IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Controls.Find("ToolStripMenuItem1") MARCHE PAS ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut Controls.Find("ToolStripMenuItem1") MARCHE PAS ?
    Bonjour voici mon problème,
    je lit un fichier .INIT qui me permet de changer la valeur ".text" de mes
    controles ( bouton , checkbox et menu )

    tout fonctionne correctement sauf pour le menu ou tout ce qui est a rapport avec : ToolStripXXX

    finchier INIT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [MainMenu]
    ToolStripMenuItem1 = "&Fichier"
    ToolStripButton1 = "enregistrer"
    ToolStripButton2 = "fermer"
     
    lireINI(Me, "MainMenu", "ToolStripMenuItem1")  '--> "&File"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
        Public Function lireINI(ByVal MyForm As Form, ByVal Entete As String, ByVal Variable As String) As String
     
            Dim StrBuild As New System.Text.StringBuilder(32768)
            Dim defval As String
            Try
                Dim Ret As Integer = GetPrivateProfileString(Entete, Variable, defval, StrBuild, 32768, fichier)
     
                Dim oCtrl As System.Windows.Forms.Form
               ' 1er function 
                oCtrl = DirectCast(GetControlByName(MyForm, Variable), System.Windows.Forms.Control)
     
                2iem function
                oCtrl = DirectCast(GetControlByName(Variable, MyForm), System.Windows.Forms.Control)
     
                If oCtrl IsNot Nothing And String.IsNullOrEmpty(StrBuild.ToString) = False Then
                    oCtrl.Text = StrBuild.ToString
                    oCtrl.Refresh()
                End If
     
                Return StrBuild.ToString
     
            Catch
            Return defval
            End Try
     
        End Function
    [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Function GetControlByName(ByRef oForm As Control, ByVal sControlName As String) As System.Windows.Forms.Control
            Dim oCtrl As System.Windows.Forms.Control
            oCtrl = oForm.Controls(sControlName)
            If oCtrl Is Nothing Then
                For Each oCtrl In oForm.Controls.Find(sControlName, True)
                    If oCtrl.Name.Equals(sControlName) Then
                        Return oCtrl
                    End If
                Next
            Else
                Return oCtrl
            End If
            Return Nothing
        End Function
    j'ai essayer avec cette methode permettant de verifier les "sous classe" mais toujours rien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
     Public Function GetControlByName(ByVal inControlName As String, ByVal inForm As Control) As Control
            Dim ctrl As Control = Nothing
            Dim VretControl As Control
            VretControl = Nothing
            Try
     
                For Each ctrl In inForm.Controls
                    ' Add this control to the result.
                    If UCase(ctrl.Name) = UCase(inControlName) Then
                        VretControl = ctrl
                    End If
                    ' Recursively call this method to add all child controls as well.
                    If ctrl.HasChildren Then
                        Dim vr As Control
                        vr = GetControlByName(inControlName, ctrl)
                        If Not vr Is Nothing Then
                            VretControl = vr
                        End If
                    End If
                Next
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
            If VretControl Is Nothing Then
                Return Nothing
            Else
                Return VretControl
            End If
     
        End Function
    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Les ToolStripItems ne sont pas des contrôles (ils n'héritent pas de la classe Control), donc tu ne peux pas les trouver avec Controls.Find. Il faut parcourir les menus pour les trouver.

    De toutes façons, quel est l'objectif ? Localiser (traduire) l'application ? Il y a un mécanisme exprès pour ça dans .NET, pas besoin de le gérer manuellement...
    Tuto ici :
    http://morpheus.developpez.com/localisationdotnet/

    (c'est en C#, mais à part la syntaxe c'est exactement pareil en VB)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Merci tomlev,

    Oui l'objectif est de traduire, mais comme il y a des termes technique
    je ne pense pas qu'un mecanisme automatique pourrait m'être utile,

    lire un fichier INIT contenant la traduction est rapide surtout
    pour une mise a jours...

    Sinon comment y accéder au propriete ToolStripItems ?

    Merci d'avance

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bilal.sdi Voir le message
    Oui l'objectif est de traduire, mais comme il y a des termes technique
    je ne pense pas qu'un mecanisme automatique pourrait m'être utile,
    Non, tu n'as pas compris... ce n'est pas une traduction automatique, c'est un mécanisme standard pour fournir des traductions. C'est toujours toi qui traduit les textes.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    et si l'ont veut ajouter une nouvelle traduction..
    il faut compiler a nouveau le projet etc..

    je vais consulter ton lien.. et y en apprendre..

    mais par curiosité comment parcourir le menu ?

    Merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bilal.sdi Voir le message
    et si l'ont veut ajouter une nouvelle traduction..
    il faut compiler a nouveau le projet etc..
    Non, pas forcément... Pour chaque langue cible, ça génère une DLL séparée (ce qu'on appelle un assembly satellite). Tu peux tout à fait générer ces DLL séparément, sans toucher au projet...

    Citation Envoyé par bilal.sdi Voir le message
    mais par curiosité comment parcourir le menu ?
    Déjà tu fais une méthode récursive qui parcourt tous les contrôles de la Form

    - Quand tu tombes sur un contrôle de type MenuStrip, tu parcours tous ses Items, et pour chaque item qui est de type ToolStripDropDownItem, tu parcours récursivement tous ses DropDownItems

    - Quand tu tombes sur un contrôle qui a un menu contextuel (propriété ContextMenuStrip), tu parcours tous les Items du menu, et pour chaque item qui est de type ToolStripDropDownItem, tu parcours récursivement tous ses DropDownItems

    Bref, autant dire que c'est assez lourd...

Discussions similaires

  1. Parametrage d'un control ADODC par code ne marche pas
    Par persephone_core dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 04/08/2013, 16h11
  2. help,software update,finds and installs ne marche pas
    Par christianf dans le forum Eclipse
    Réponses: 3
    Dernier message: 31/07/2007, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo