Disable Repaint para RichTextBox sintaxis resaltando
al realizar una sintaxis resaltando en un richTextBox durante la entrada del usuario, resolver el flujo requiere deshabilitar la reproducción. Solución
La solución actual implica anular la función "wndproc" para interceptar y suprimir los mensajes de repintado. Sin embargo, este enfoque no es práctico para funciones externas que trabajan con un richtextBox provisto.
superando el supervisión
un enfoque más efectivo es agregar los métodos de inicio y endupdate faltantes a la clase RichTextBox. Estos métodos generan el mensaje wm_setredraw para suprimir la repasenting.
agregando los métodos
crea una nueva clase en su proyecto con el siguiente código:
usando el sistema; usando System.Windows.Forms; usando System.Runtime.inTeropServices; clase MyRichTextBox: RichTextBox { public void beginUpdate () { SendMessage (this.handle, wm_setredraw, (intptr) 0, intptr.zero); } public void endupdate () { SendMessage (this.handle, wm_setredraw, (intptr) 1, intptr.zero); this.Invalidate (); } [DllImport ("user32.dll")] Private static extern intptr sendMessage (intptr hwnd, int msg, intptr wp, intptr lp); private const int wm_setredraw = 0x0b; }
using System; using System.Windows.Forms; using System.Runtime.InteropServices; class MyRichTextBox : RichTextBox { public void BeginUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); } public void EndUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); this.Invalidate(); } [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); private const int WM_SETREDRAW = 0x0b; }
Ahora puede usar estos métodos para deshabilitar y habilitar la repasenting dentro de su sintaxis resaltando la función.
Solución alternativa
[&] si agrega los métodos a la clase no es posible, usted también puede usar el SendedMesge ". directamente antes y después de actualizar el texto.sendMessage (this.handle, wm_setredraw, (intptr) 0, intptr.zero); // deshabilitar el repintado // Actualizar texto SendMessage (this.handle, wm_setredraw, (intptr) 1, intptr.zero); // habilitar repintando this.Invalidate ();
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3