2008-09-30 6 views
13

Existe-t-il un moyen de modifier la taille de l'onglet par défaut dans un .NET RichTextBox? Il semble actuellement être fixé à l'équivalent de 8 places, ce qui est assez grand à mon goût. Editer: Pour clarifier, je veux définir la valeur par défaut globale des affichages "\ t" comme 4 espaces pour le contrôle. D'après ce que je peux comprendre, la propriété SelectionTabs exige que vous sélectionniez d'abord tout le texte, puis la largeur des onglets via le tableau. Je le ferai si je le dois, mais je préférerais simplement changer la valeur par défaut globale une fois, si possible, sachant que je n'ai pas à le faire à chaque fois.Modification de la taille de l'onglet par défaut dans RichTextBox

Répondre

16

Vous pouvez le définir en définissant la propriété SelectionTabs.

private void Form1_Load(object sender, EventArgs e) 
{ 
    richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 }; 
} 

MISE À JOUR:
La séquence des questions ....

Si vous définissez les onglets avant le texte du contrôle en cours d'initialisation, alors vous ne devez pas sélectionner le texte avant le réglage des onglets .

Par exemple, dans le code ci-dessus, cela permet de garder le texte avec l'onglet 8 espaces d'origine arrêts:

richTextBox1.Text = "\t1\t2\t3\t4"; 
richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 }; 

Mais cela utilisera les nouvelles:

richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 }; 
richTextBox1.Text = "\t1\t2\t3\t4"; 
+3

Il peut être utile d'ajouter que ces valeurs sont les tabulations * en pixels * plutôt qu'en caractères. Il est mentionné sur la [page MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.selectiontabs.aspx) mais semble quelque peu contre-intuitif. – JYelton

1

Winforms n » Vous avez une propriété pour définir la taille de l'onglet par défaut d'un RichTexBox avec un seul nombre, mais si vous êtes prêt à creuser dans la Rtf de la zone de texte enrichi, et modifiez cela, vous pouvez utiliser un paramètre appelé: "\ deftab ". Le nombre indique ensuite le nombre de twips (1 point = 1/72 inch = 20 twips). Le résultat Rtf avec la taille de l'onglet standard 720 twips pourrait ressembler à:

{\rtf1\ansi\ansicpg1252\deff0\deflang2057\deftab720{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} 
\viewkind4\uc1\pard\f0\fs41 
1\tab 2\tab 3\tab 4\tab 5\par 
} 

Si vous avez besoin de convertir twips en pixels, utilisez ce code inspiré de Convert Pixels to Points:

int tabSize=720; 
Graphics g = this.CreateGraphics(); 
int pixels = (int)Math.Round(((double)tabSize)/1440.0 * g.DpiX); 
g.Dispose(); 
0

Si vous avez un Boîte RTF qui est utilisée uniquement pour afficher (en lecture seule) du texte à hauteur fixe, la chose la plus simple serait de ne pas jouer avec les tabulations. Remplacez-les simplement par des espaces.

Si vous voulez que l'utilisateur puisse entrer quelque chose et utiliser cette touche de tabulation pour avancer, vous pouvez également capturer la touche Tab en remplaçant OnKeyDown() et en remplaçant les espaces.

+0

Sauf si vous avez des espaces de 14pt, des espaces en gras ou des espaces formatés autrement. –

+0

Vous avez raison. J'ai oublié de mentionner que cela a surtout du sens pour les éditeurs de code qui utilisent 'Courier New' et une seule taille de police. Dans 'Courier New', un espace en gras a la même largeur qu'un espace normal. Mais si vous utilisez des polices à pas variable ou des tailles de police différentes, il ne serait pas judicieux de remplacer les tabulations par des espaces. – Elmue

Questions connexes