none
Extention Richtextbox en c# RRS feed

  • Question

  • Bonjour a tous

    Voila! Mon probleme est le suivant J'ai réussi a codé ca pour faire l'extention a ma RTB

     #region " RtbExtention "
            static public void AddRemBullets(this RichTextBox RTB)
            {
                if (RTB.SelectionBullet == false)
                {
                    RTB.BulletIndent = 20;
                    RTB.SelectionBullet = true;
                }
                else
                {
                    RTB.BulletIndent = 0;
                    RTB.SelectionBullet = false;
                }
            }
            static public object CurrentColumn(this RichTextBox RTB)
            {
                return RTB.SelectionStart - RTB.GetFirstCharIndexOfCurrentLine() + 1;
            }
            static public object CurrentLine(this RichTextBox RTB)
            {
                return RTB.GetLineFromCharIndex(RTB.SelectionStart) + 1;
            }
            static public void MakeBold(this RichTextBox RTB)
            {
                NewFont = new Font(RTB.SelectionFont, (RTB.SelectionFont.Bold ? RTB.SelectionFont.Style & ~FontStyle.Bold : RTB.SelectionFont.Style | FontStyle.Bold));
                RTB.SelectionFont = NewFont;
            }
            static public void MakeItalic(this RichTextBox RTB)
            {
                NewFont = new Font(RTB.SelectionFont, (RTB.SelectionFont.Italic ? RTB.SelectionFont.Style & ~FontStyle.Italic : RTB.SelectionFont.Style | FontStyle.Italic));
                RTB.SelectionFont = NewFont;
            }
            static public void MakeUnderline(this RichTextBox RTB)
            {
                NewFont = new Font(RTB.SelectionFont, (RTB.SelectionFont.Underline ? RTB.SelectionFont.Style & ~FontStyle.Underline : RTB.SelectionFont.Style | FontStyle.Underline));
                RTB.SelectionFont = NewFont;
            }
            static public int FindMyText(this RichTextBox RTB, string text, int start)
            {
                // Initialize the return value to false by default.
                int returnValue = -1;
                // Ensure that a search string has been specified and a valid start point.
                if (text.Length > 0 && start >= 0)
                {
                    // Obtain the location of the search string in richTextBox1.
                    int indexToText = RTB.Find(text, start, RichTextBoxFinds.MatchCase);
                    // Determine whether the text was found in richTextBox1.
                    if (indexToText >= 0)
                    {
                        returnValue = indexToText;
                    }
                    else
                    {
                        MessageBox.Show(null, "Je n'ai pas trouvé [" + text + "]", "Rechercher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                return returnValue;
            }
            static public int FindNext(this RichTextBox RTB, string text, int start)
            {
                int StartPosition = RTB.SelectionStart + 2;
                StartPosition = RTB.Find(text, StartPosition, RichTextBoxFinds.MatchCase);
                if (StartPosition == 0)
                {
                    return 0;
                }
                else if (StartPosition != -1)
                {
                    RTB.Select(StartPosition, text.Length);
                    RTB.ScrollToCaret();
                    RTB.Focus();
                }
                else { MessageBox.Show("je trouve plus rien dans ce texte.", Application.ProductName + "Rechercher suivante", MessageBoxButtons.OK, MessageBoxIcon.Information); }
                return StartPosition;
            }
            static public int AddDate(this RichTextBox RTB, string text, int start)
            {
                // Initialize the return value to false by default.
                int returnValue = -1;
                // Ensure that a search string has been specified and a valid start point.
                if (text.Length > 0 && start >= 0)
                {
                    // Obtain the location of the search string in richTextBox1.
                    int indexToText = RTB.Find(text, start, RichTextBoxFinds.MatchCase);
                    // Determine whether the text was found in richTextBox1.
                    if (indexToText >= 0)
                    {
                        returnValue = indexToText;
                        RTB.SelectionStart = RTB.TextLength;
                        RTB.SelectedText = "\r\n";
                        RTB.Select();
                    }
                    else
                    {
                        RTB.SelectionStart = RTB.TextLength;
                        RTB.SelectedText = "\r\n";
                        RTB.SelectedText = "\r\n";
                        RTB.SelectionFont = new Font("Microsoft Sans serif", 14, FontStyle.Bold);
                        RTB.SelectedText = DateTime.Now.ToString("dddd, dd MMM yyyy");
                        RTB.SelectedText = "\r\n";
                        RTB.SelectionFont = new Font("Microsoft Sans serif", RTB.SelectionFont.Size, FontStyle.Regular);
                        RTB.SelectedText = "\r\n";
                        RTB.SelectionStart = RTB.TextLength;
                        RTB.Select();
                        RTB.Focus();
                    }
                }
                return returnValue;
            }
            #endregion

    ce que je ne trouve pas c'est comment faire pour les deux suivants.

     private void rtfFontStyle()
            {
                if (rtf.SelectionFont != null)
                {
                    if (rtf.SelectionFont.Bold == true)
                    {
                        tbBold.Checked = true;
                    }
                    else
                    {
                        tbBold.Checked = false;
                    }
                    if (rtf.SelectionFont.Italic == true)
                    {
                        tbItalic.Checked = true;
                    }
                    else
                    {
                        tbItalic.Checked = false;
                    }
                    if (rtf.SelectionFont.Underline == true)
                    {
                        tbUnderline.Checked = true;
                    }
                    else
                    {
                        tbUnderline.Checked = false;
                    }
                }
            }
            private void rtfAlignment()
            {
                if (this.rtf.SelectionAlignment == HorizontalAlignment.Left)
                {
                    tbAlignLeft.Checked = true;
                    tbAlignCenter.Checked = false;
                    tbAlignRight.Checked = false;
                    mnuToolsOpAlignLeft.Checked = true;
                    mnuToolsOpAlignCenter.Checked = false;
                    mnuToolsOpAlignRight.Checked = false;
                }
                else if (this.rtf.SelectionAlignment == HorizontalAlignment.Center)
                {
                    tbAlignLeft.Checked = false;
                    tbAlignCenter.Checked = true;
                    tbAlignRight.Checked = false;
                    mnuToolsOpAlignLeft.Checked = false;
                    mnuToolsOpAlignCenter.Checked = true;
                    mnuToolsOpAlignRight.Checked = false;
                }
                else if (this.rtf.SelectionAlignment == HorizontalAlignment.Right)
                {
                    tbAlignLeft.Checked = false;
                    tbAlignCenter.Checked = false;
                    tbAlignRight.Checked = true;
                    mnuToolsOpAlignLeft.Checked = false;
                    mnuToolsOpAlignCenter.Checked = false;
                    mnuToolsOpAlignRight.Checked = true;
                }
            }

    KKun a une petite idée la dessus et bien sur si possible de le faire

    MERCI


    Daniel

    mardi 9 octobre 2012 16:48

Réponses

  • Ok, je pense que le problème est que les premières méthodes s'occupent exclusivement du contrôle et donc se prêtent bien à une extension. Les deux dernières référencent aussi d'autres contrôles et donc se prêtent je pense moins bien à une extension générale (je pense que le problème est que tu n'arrives pas à référencer ces contrôles lorsque tu transformes la méthode en extension ? C'est techniquement possible mais je ne crois pas que cela ait vraiment un sens).

    J'essaierai de faire une petite démo pour voir si ce que j'ai en-tête pourrais convenir...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Aurel Bera lundi 15 octobre 2012 08:28
    jeudi 11 octobre 2012 08:18
    Modérateur
  • Bonjour Patrice

    Merci en avance

    pour cette essaie en demo je peut tres bien utiliser mes codes de la facon dont je l'utilise deja  pas besoint de te les briser sur ce sujet.

    je voulais savoir si possible de le faire si comme tu dis tu en vois pas le sens

    mieu pour moi d'en rester comme je fais deja plus simple nom

    Autrement ca va encore une fois un gros merci


    Daniel

    • Marqué comme réponse Aurel Bera lundi 15 octobre 2012 08:27
    dimanche 14 octobre 2012 14:11

Toutes les réponses

  • Bonjour,

    Je ne comprends pas bien si le souci est d'appliquer le même principe que précédemment (à cause des contrôles tiers j'imagine ?) ou si c'est une question plus générale sur l'architecture.

    Je ne suis pas sûr que le mieux soit d'en faire des méthodes d'extension. C'est peut-être un peu "luxe", mais je verrais bien un objet intermédiaire qui stockerait l'alignement et le style en cours. Cet objet serait mis à jour par la RTB (peut-être là avec une méthode d'extension) et les contrôles qui ont en besoin souscrirait aux évènements de changement des propriétés de cet intermédiaire pour se mettre à jour.

    L'avantage est qu'au lieu de noyer les mises à jour des contrôles "en dur" dans du code on déconnecte la RTB et les autres contrôles qui ne se connaissent pas les uns les autres et il devient plus facile d'ajouter facilement un nouveau contrôle qui aurait besoin également de se mettre à jour en fonction de ces changements (ou même d'alimenter les valeurs depuis une autre RTB si on ajoute plus tard une deuxième info RichText sur le même écran)... C'est du Windows Forms ? (au cas où une petite maquette de principe serait utile)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 9 octobre 2012 18:09
    Modérateur
  • Bonjour et merci Patrice

    Je pense que tu a cerner mon probleme

    J'ai piocher longtemps pour monter ce bout de code sur l'extention avant de le comprendre et l'appliquer

    pour les deux dernier j'apprierais bien un peut d'aide si faisable si non je peut toujours rester avec le code actuel

    MERCI!


    Daniel

    mercredi 10 octobre 2012 18:14
  • Ok, je pense que le problème est que les premières méthodes s'occupent exclusivement du contrôle et donc se prêtent bien à une extension. Les deux dernières référencent aussi d'autres contrôles et donc se prêtent je pense moins bien à une extension générale (je pense que le problème est que tu n'arrives pas à référencer ces contrôles lorsque tu transformes la méthode en extension ? C'est techniquement possible mais je ne crois pas que cela ait vraiment un sens).

    J'essaierai de faire une petite démo pour voir si ce que j'ai en-tête pourrais convenir...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Aurel Bera lundi 15 octobre 2012 08:28
    jeudi 11 octobre 2012 08:18
    Modérateur
  • Bonjour Patrice

    Merci en avance

    pour cette essaie en demo je peut tres bien utiliser mes codes de la facon dont je l'utilise deja  pas besoint de te les briser sur ce sujet.

    je voulais savoir si possible de le faire si comme tu dis tu en vois pas le sens

    mieu pour moi d'en rester comme je fais deja plus simple nom

    Autrement ca va encore une fois un gros merci


    Daniel

    • Marqué comme réponse Aurel Bera lundi 15 octobre 2012 08:27
    dimanche 14 octobre 2012 14:11
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    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.

    lundi 15 octobre 2012 08:28