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

Windows Forms Discussion :

[c#] Focus avec RichTexBox


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Développeur Web
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [c#] Focus avec RichTexBox
    Bonjour, bonsoir,

    Je m'excuse d'avance si ma question a été posée maintes fois, mais j'ai cherché toute l'après-midi sur l'internet, et sur l'aide de MSDN pour chercher une sollution à mon problème, en vain.

    Déjà, je vous situe le context, tout simple. J'ai un RichTextBox, multiline donc, et dedans il y a du text. J'ai une thread qui ajoute du text à cette RichTextBox dès que des informations sont disponnibles, et il l'ajoute à la suite du text existant, à la ligne (\r\n).

    Jusqu'à là, aucun problème. Mais c'est maintenant que çela se corse (pour moi en tout cas). Des que le text dépasse le nombre de ligne disponnible, et que la scrollbar s'active, impossible de faire un Focus sur la dernière ligne.

    J'ai beau essayer avec des SelectStart, SelectLength, Select, Focus, etc... Mais il ne semble jamais y arriver.

    Auriez-vous la solution s'il-vous-plait? J'en serai granement remerciant

    (Cela va de soit, au cas où, que je n'arrive pas non plus avec une textbox. Cependant j'ai pas eu de difficulté pour la ListeBox).

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 80
    Points
    80
    Par défaut
    Je n'en suis pas sûr mais je me demande si un richTextBox.AppendText(""); (concaténation d'une chaîne vide) ne rend pas le focus de la fin du richTextBox.

    A essayer, mais sans trop de conviction..je n'ai pas d'autres idées...

  3. #3
    Candidat au Club
    Développeur Web
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut dfg
    L'AppendText(""); n'a pas fonctionné.

    Voici le code qui ajoute le text à la RichTextBox


    rtbx_Messages.Text += commande+"\r\n";
    int nb_start = rtbx_Messages.TextLength-3; //dernière chaine, pas \r\n
    rtbx_Messages.SelectionStart = nb_start;
    rtbx_Messages.Select(nb_start, 1); ((Select 1 char

    try
    {
    rtbx_Messages.Focus();
    }
    catch
    {
    MessageBox.Show("Pas pu focuser");
    }
    rtbx_Messages.AppendText("");

    Cela ne fait rien. Cependant, j'ai placé un evenement MouseHover sur la RTB, et avec comme action, seulement rtbx_Messages.Focus();
    Et ca m'ammène sur la ligne avec le charactère en sélectionné.

    Je ne comprend pas pourquoi ça le fait sur ce Focus() et pas celui de la procédure d'ajout... Une idée?

  4. #4
    Candidat au Club
    Développeur Web
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai finalement réussis a contourner le problème.

    Je pense que c'est au niveau du Thread qui gérè les données entrantes qui à posé problème. Il ne devait probablement pas arriver à utiliser le Focus.

    J'ai donc fait une FIFO, avec un timer qui verifie des qu'il y a des entrées, et les ajoute dans la RichTextBox et met le Focus sur la fin.

    if(fifostack.Count != 0)
    {//Il y a un message
    //Prend simplement le plus ancien

    rtbx_Messages.Focus();
    if(rtbx_Messages.Text != "")
    {
    rtbx_Messages.Text += "\r\n";
    }
    rtbx_Messages.Text +=
    fifostack.Dequeue().ToString();
    int nb_start = rtbx_Messages.TextLength-3;
    rtbx_Messages.SelectionStart = nb_start;
    rtbx_Messages.Select(rtbx_Messages.TextLength, 0);

    rtbx_Messages.Focus();
    txt_Write.Focus();
    }

    Cela évite en même temps de surcharger la Thread d'écoute.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Ca marche pas mal aussi ca !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaRichTextBox.ScrollToCaret();

Discussions similaires

  1. [AJAX][IE 6] impossible de recuperer le focus avec la souris
    Par magnus2005 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/03/2009, 11h59
  2. Pb de focus avec des jTextfield
    Par diablinho dans le forum Composants
    Réponses: 1
    Dernier message: 08/03/2007, 14h47
  3. [VB.NET][2.0]Changer le focus avec la touche Entrée
    Par Angath dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/11/2006, 10h11
  4. Problème de focus avec une TTreeView
    Par Rustine dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/10/2005, 18h12
  5. [C#] Changer le focus avec la touche return
    Par sblanc74 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2003, 18h38

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