he encontrado una solución para los problemas de altura de la caja de texto enriquecido .. lo he modificado un para uso general ..
Crear siguiente estructura en su aplicación ....
[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public Int32 left;
public Int32 top;
public Int32 right;
public Int32 bottom;
}
[StructLayout(LayoutKind.Sequential)]
public struct SCROLLBARINFO {
public Int32 cbSize;
public RECT rcScrollBar;
public Int32 dxyLineButton;
public Int32 xyThumbTop;
public Int32 xyThumbBottom;
public Int32 reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public Int32[] rgstate;
}
Crear siguientes variables privadas en su clase para la forma (donde cada vez que necesita para calcular la altura de texto enriquecido)
private UInt32 SB_VERT = 1;
private UInt32 OBJID_VSCROLL = 0xFFFFFFFB;
[DllImport("user32.dll")]
private static extern
Int32 GetScrollRange(IntPtr hWnd, UInt32 nBar, out Int32 lpMinPos, out Int32 lpMaxPos);
[DllImport("user32.dll")]
private static extern
Int32 GetScrollBarInfo(IntPtr hWnd, UInt32 idObject, ref SCROLLBARINFO psbi);
Agregar método siguiente para su clase de forma
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;
}
Es posible que deba modificar el método anterior para que funcione de acuerdo con sus requisitos ... Hacer sur e para enviar cadena RTF como parámetro al método de texto no es normal y también asegurarse de asignar ancho y la altura disponible para la variable RichTextbox en el método ...
Se puede jugar con WordWrap función de sus necesidades ...
Gracias. No entiendo muy bien esa página. ¿Por qué dibuja texto? ¿Puede enviarme un valor de ancho y alto para que pueda restablecer el tamaño de RichTextBox al nuevo tamaño? –
Tal vez si hago una pregunta diferente, simplifique las cosas ... –
'TextRenderer.MeasureText' no dibuja nada; simplemente devuelve el tamaño del texto en píxeles. – SLaks