texto que pulse puede porque permite parte para ordenar haga formulario forma escribir enriquecido ejemplos cuadro controles control contenido clic añadir aquí c# winforms .net-4.0 scrollbar richtextbox

c# - pulse - ¿Obtiene la posición de desplazamiento actual desde el control de cuadro de texto enriquecido?



no se puede ordenar el contenido porque forma parte de un control de contenido (3)

Esto debería acercarlo a lo que está buscando. Esta clase hereda de RichTextBox y utiliza algunos pinvoking para determinar la posición de desplazamiento. Agrega un evento ScrolledToBottom que se ScrolledToBottom si el usuario se desplaza usando la barra de desplazamiento o usa el teclado.

public class RTFScrolledBottom : RichTextBox { public event EventHandler ScrolledToBottom; private const int WM_VSCROLL = 0x115; private const int WM_MOUSEWHEEL = 0x20A; private const int WM_USER = 0x400; private const int SB_VERT = 1; private const int EM_SETSCROLLPOS = WM_USER + 222; private const int EM_GETSCROLLPOS = WM_USER + 221; [DllImport("user32.dll")] private static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos); [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, Int32 wMsg, Int32 wParam, ref Point lParam); public bool IsAtMaxScroll() { int minScroll; int maxScroll; GetScrollRange(this.Handle, SB_VERT, out minScroll, out maxScroll); Point rtfPoint = Point.Empty; SendMessage(this.Handle, EM_GETSCROLLPOS, 0, ref rtfPoint); return (rtfPoint.Y + this.ClientSize.Height >= maxScroll); } protected virtual void OnScrolledToBottom(EventArgs e) { if (ScrolledToBottom != null) ScrolledToBottom(this, e); } protected override void OnKeyUp(KeyEventArgs e) { if (IsAtMaxScroll()) OnScrolledToBottom(EventArgs.Empty); base.OnKeyUp(e); } protected override void WndProc(ref Message m) { if (m.Msg == WM_VSCROLL || m.Msg == WM_MOUSEWHEEL) { if (IsAtMaxScroll()) OnScrolledToBottom(EventArgs.Empty); } base.WndProc(ref m); } }

Así es como se puede usar:

public Form1() { InitializeComponent(); rtfScrolledBottom1.ScrolledToBottom += rtfScrolledBottom1_ScrolledToBottom; } private void rtfScrolledBottom1_ScrolledToBottom(object sender, EventArgs e) { acceptButton.Enabled = true; }

Ajustar según sea necesario.

He buscado en Internet a lo largo y ancho y he visto muchas preguntas como esta, pero no he visto una respuesta real.

Tengo un control de cuadro de texto enriquecido con mucho texto. Tiene cierta información legal en este control. Por defecto, el botón "Aceptar" está deshabilitado. Quiero detectar en el evento de desplazamiento si la posición de la barra de desplazamiento v está en la parte inferior. Si está en la parte inferior, habilite el botón.

¿Cómo detectaría la posición actual de la barra de desplazamiento en v?

¡Gracias!

EDITAR Estoy usando WinForms (.Net 4.0)



Lo siguiente funciona muy bien en una de mis soluciones:

Point P = new Point(rtbDocument.Width, rtbDocument.Height); int CharIndex = rtbDocument.GetCharIndexFromPosition(P); if (rtbDocument.TextLength - 1 == CharIndex) { btnAccept.Enabled = true; }