Quelqu'un peut-il s'il vous plaît expliquer comment j'allumerais la mesure de la chaîne à l'intérieur d'un contrôle RichTextbox afin que je puisse redimensionner automatiquement la commande Richtextbox en fonction de son contenu? P>
merci p>
EDIT: P>
J'y ai pensé et, étant donné que la réponse ci-dessous ne fonctionnera pas s'il existe différentes polices de la commande Richtextbox, que si, je pourrais obtenir les coordonnées en haut de gauche de la commande RichTextBox, puis obtenir le fond De bonnes coordonnées de la dernière ligne de texte à l'intérieur du RTB. Cela me donnerait essentiellement la largeur et la hauteur de la chaîne à l'intérieur du contrôle RichTextBox. Est-ce possible? Ou est-ce une mauvaise idée de le faire de cette façon? P>
6 Réponses :
Vous pouvez mesurer une chaîne en appelant textrenderer.measuretext Code>
. P>
Toutefois, si le texte contient plusieurs polices, cela ne fonctionnera pas. P>
edit strong>: vous recherchez le getPositionFrromchaindex code>
méthode.
Notez que s'il y a plusieurs lignes, vous devez prendre le maximum des coordonnées X du dernier caractère de chaque ligne. P>
Merci. Je ne comprends pas bien cette page. Pourquoi cela attire-t-il du texte? Peut-il simplement m'envoyer une valeur de largeur et de hauteur afin que je puisse réinitialiser la taille de la nouvelle taille?
textrenderer.metsetext code> ne dessine rien; Il renvoie simplement la taille du texte en pixels.
En supposant que quelqu'un tape dans la commande, vous pouvez utiliser un événement pour déclencher chaque fois qu'un caractère est entré (compteur d'incrément) et décrément lorsqu'il est supprimé. Cela vous donnerait un véritable compte.
Edit: P>
Avez-vous essayé de régler la hauteur? p> ou vous pouvez le faire en utilisant la largeur: p>
C'est actuellement ce que je fais, bien que vous ne puissiez pas prendre en compte les styles / tailles de police de cette façon, et éventuellement, le RTB ne sera pas en mesure de suivre et que le texte déborde
Aucune infraction, mais cela produit des résultats très laids. Il doit y avoir un moyen de le faire sans ressembler à la RichTextbox est sur le point d'exploser sur mon moniteur.
Hmm, il semblait bien fonctionner ici mais je n'applique pas de styles de police
Cela pourrait fonctionner pour des boîtes de texte simples, mais cela ne fonctionne pas pour les richtextboxes qui peuvent avoir des mots en gras, plusieurs polices utilisées et plusieurs tailles de police.
Essayez appeler getPreferredSize (taille.empty ) . Il est défini dans la classe de contrôle et si la nervation de la propriété de RichtextboxControl, devrait vous donner ce que vous recherchez. P>
Si vous passez quelque chose d'autre que size.empty dans la méthode, il utilisera cette valeur comme une contrainte maximale. En utilisant la taille.empty signifie que la taille potentielle est sans bornes. P>
Vous pouvez même l'appeler avec la largeur getpreferredsize (nouvelle taille (largeur, 0)) code> et vous pouvez obtenir la hauteur de la taille de retour de cet appel.
Cela ne fonctionne pas. La hauteur et la largeur renvoyées par GetPerPerredSize sont à la fois trop courtes.
Mettez le code suivant dans le ContenuResized Code>
événement:
Private Sub rtb_ContentsResized(ByVal sender As Object, ByVal e As System.Windows.Forms.ContentsResizedEventArgs) Handles txtQuestion.ContentsResized Dim h = e.NewRectangle.Height, w = e.NewRectangle.Width h = Math.Max(h, sender.Font.Height) h = Math.Min(h, Me.ClientSize.Height - 10 - sender.Top) h += sender.Height - sender.ClientSize.Height + 1 sender.Height = h End Sub
ContenuSentSisized Code> et
E.Newrectangle Code> Est-ce que l'astuce m'a fait. Les autres suspects habituels par exemple
Autosize CODE>,
GETPREFERREDSIZE CODE> Ne semble pas fonctionner correctement pour
Richtextbox Code>.
Cela ne fonctionne pas. La hauteur se termine trop courte et même si je modifiez cela pour définir Sender.Width = w, la largeur ne change pas du tout.
J'ai trouvé une solution pour les problèmes de hauteur de la boîte de texte riche. Je l'ai modifié A pour une utilisation générale.
Créez des structs suivantes dans votre application .... strong> P> private int CalculateRichTextHeight(string richText) {
int height = 0;
RichTextBox richTextBox = new RichTextBox();
richTextBox.Rtf = richText;
richTextBox.Height = this.Bounds.Height;
richTextBox.Width = this.Bounds.Width;
richTextBox.WordWrap = false;
int nHeight = 0;
int nMin = 0, nMax = 0;
SCROLLBARINFO psbi = new SCROLLBARINFO();
psbi.cbSize = Marshal.SizeOf(psbi);
richTextBox.Height = 10;
richTextBox.ScrollBars = RichTextBoxScrollBars.Vertical;
int nResult = GetScrollBarInfo(richTextBox.Handle, OBJID_VSCROLL, ref psbi);
if (psbi.rgstate[0] == 0) {
GetScrollRange(richTextBox.Handle, SB_VERT, out nMin, out nMax);
height = (nMax - nMin);
}
return height;
}
Cela ne fonctionne pas. La hauteur finit toujours trop courte.
Ajoutez sur la bonne réponse de Bathineni:
Contexte: Je devais mesurer la hauteur de sortie RTF pour le rendu sur papier et que j'ai des en-têtes de page dynamique personnalisés, je devais contrôler la pagination). P>
(richtextbox.getlinefrrromchaindex laissez-moi baisser à cause de la RTF complexe; y compris des lignes et des tables multi-colonnes avec WordWrap). em> p> Tous fonctionnaient bien, jusqu'à ce que quelqu'un d'autre ait utilisé mon application avec le Windows redoutables "Faites du texte et d'autres éléments plus grands ou plus petits" (paramètres DPI.) - En bref, mesurez maintenant des polices de taille plus grandes, il vissait les calculs de la page de la page. (L'imprimante a toujours rendu le texte et les colonnes correctement - seules les longueurs de la page étaient désormais toutes erronées.) p> Seule la différence DPI a échoué comme dans un texte plus important ne correspondait pas correctement dans la source RTF TX et CellX valeurs . P> Quoi qu'il en soit, au cas où d'autres font des choses folles similaires et des erreurs ont eu lieu avec les mods suivants (éventuellement très peu) à la méthode Bathineni CalculatedexTheight: P> lines = height / (int)(16 * (dpix / 96))