Erreur d'ajout des Fonts avec la combobox de Sandribbon [Résolu]

Messages postés
26
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 décembre 2006
- - Dernière réponse : Tim221
Messages postés
26
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 décembre 2006
- 20 déc. 2006 à 20:34
Bonjour, ayant découvert et insérer Sandribbon qui "copie" le style d'Office 2007 dans mon traitement de texte, je doit pratiquement recommencé de 0% mon code entier alors je me suis attaqué  à l'ajout de tailles et de styles d'écritures mais le problème est que quand je lance ce code :

    Public Sub polices()'lancer au démarrage
        Dim famille As FontFamily
        Dim fontfamille As List(Of Divelements.Sandribbon.GalleryButton) = New List(Of Divelements.Sandribbon.GalleryButton)
        For Each famille In FontFamily.Families ' Pour chaque types d'écritures ajouter sous forme de bouton dans policecombobox_ruban
            If famille.IsStyleAvailable(FontStyle.Regular) Then
                bouton = New Divelements.Sandribbon.GalleryButton(famille.Name)
                bouton.MinimumSize = New Size(172, 18)
                bouton.Tag = famille
                bouton.ShowText = False
                fontfamille.Add(bouton)
            End If
            policecombobox_ruban.Items.AddRange(fontfamille.ToArray())
        Next
    End Sub
Lorsque que je le lance, une erreur apparait sur policecombobox_ruban.Items.AddRange(fontfamille.ToArray()), il me dit "The widget already belongs to this collection." en traduction "Le widget appartient déja à la collection".

Si vous pouvez m'aider, dites-moi ce qui ne marche pas.

Merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
22
3
Merci
Salut,

Moi je metterai cette ligne un peu plus bas:

     
     [...]
     fontfamille.Add(bouton)
    End If
    <strike>policecombobox_ruban.Items.AddRange(fontfamille.ToArray())</strike>
  Next
  policecombobox_ruban.Items.AddRange(fontfamille.ToArray())
End Sub

Sinon, sa t'ajoute la collection a chaque police.
__________
Kenji

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
22
3
Merci
Salut,

Pour la premiere, c'est l'assignation de l'événement
En vb.net c'est


AddHandler bouton.OwnerDraw, AddressOf OnDrawFontFamilyButton





Pour la deuxieme, il faut faire un cast :



CType
(Button.Tag, System.Drawing.FontFamily)









__________
Kenji

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
26
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 décembre 2006
0
Merci
Merci une aucune erreur n'apparait mais la combobox est complétement vide alors que polices() est bien lancé au load.Cela est du a une phrase que j'ai enlevé car elle appelle une autre fonction.

Le problème est que je traduis du C# en VB2005, ce qui engendre plein de problème.
La fonction a donc plein d'erreurs

Voila le code en C#:

        private void polices()
        {
            // Ajout des fonts populaires dans la combobox
            List<GalleryButton> fontfamille= new List<GalleryButton>();
            foreach (FontFamily famille in FontFamily.Families)
            {
                if (famille.IsStyleAvailable(FontStyle.Regular))
                {
                    GalleryButton button = new GalleryButton(famille.Name);
                    button.MinimumSize = new Size(172, 18);
                    button.Tag = famille;
                    button.ShowText = false;
                    button.OwnerDraw += new DrawEventHandler(OnDrawFontFamilyButton);//ligne retirée
                    fontfamille.Add(button);
                }
            }
            policecombobox_ruban.Items.AddRange(fontfamille.ToArray());//erreur corrigé grâce à Charles Racaud
        }

        private void OnDrawFontFamilyButton(object sender, DrawEventArgs e)//fonction retirée
        {
            GalleryButton button = (GalleryButton)sender;
            FontFamily family = (FontFamily)button.Tag;

            using (Font font = new Font(family, 12))
                IndependentText.DrawText(e.RenderingContext.Graphics, family.Name, font, button.BoundsWithoutPadding, e.RenderingContext.StandardNearsideText, e.RenderingContext.DefaultTextColor);
        }

Et maintenant celui en VB2005:

  Public Sub polices()'lancer au démarrage
        Dim famille As FontFamily
        Dim fontfamille As List(Of Divelements.Sandribbon.GalleryButton) = New List(Of Divelements.Sandribbon.GalleryButton)
        For Each famille In FontFamily.Families ' Pour chaque types d'écritures ajouter sous forme de bouton dans policecombobox_ruban
            If famille.IsStyleAvailable(FontStyle.Regular) Then
                bouton = New Divelements.Sandribbon.GalleryButton(famille.Name)
                bouton.MinimumSize = New Size(172, 18)
                bouton.Tag = famille
                bouton.ShowText = False
                bouton.OwnerDraw += New DrawEventHandler(AddressOf OnDrawFontFamilyButton)
                fontfamille.Add(bouton)
            End If
        Next
        policecombobox_ruban.Items.AddRange(fontfamille.ToArray())
    End Sub

    Private Sub OnDrawFontFamilyButton(ByVal sender As Object, ByVal e As DrawEventArgs)

        Dim bouton As GalleryButton = sender
        Dim family As FontFamily = Button.Tag
        Dim font As Font = New Font(family, 12)

        Divelements.SandRibbon.Rendering.IndependentText.DrawText(e.RenderingContext.Graphics, family.Name, font, Button.BoundsWithoutPadding, e.RenderingContext.StandardNearsideText, e.RenderingContext.DefaultTextColor)
    End Sub

Voila tout ce qui en souligné en rouge en ce que VB2005 me surligne.
Pour "bouton.OwnerDraw += New DrawEventHandler(AddressOf OnDrawFontFamilyButton)" il me dit que c'est un évènement et qu'il faut utilisé Raiseevent,
pour button.tag que c'est une référence à un membre non partagé requiert une référence d'objet.

Encore une fois si vous savez  comment y remédier merci d'avance
Commenter la réponse de Tim221
Messages postés
26
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 décembre 2006
0
Merci
Merci encore une fois, tu viens de m'apprendre 2 choses en vb.net

Le problème des erreurs est réglé, mais l'affichage des écritures ne marche toujours pas.
lorsque je lance mon programme et que je clique sur ma combobox, elle apparait vide.

Cela deviens lassant...

Mais bon si tu as encore une idée pour résoudre ce problème n'hésite pas.

Merci encore une fois de m'aider
Commenter la réponse de Tim221
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
22
0
Merci
Elle appartait vide ou elle est remplis mais les textes ne sont pas affichées ?
Maintenant je sais pas, je n'utilise pas ce contrôle.






__________
Kenji
Commenter la réponse de Charles Racaud
Messages postés
26
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
20 décembre 2006
0
Merci
Je pense avoir trouvé, il s'agit d'un nombre considérable de fonction qui permettent l'ajout de ces textes dans la combobox, cela va me prendre au moins 2 moins (en plus avec Noël...).

Merci beaucoup de m'avoir aidé en n'utilisant pas ce contrôle.
Commenter la réponse de Tim221