visual tamaño solo resolucion redimensionar pantalla maximizar lectura formularios escala controles cambiar autoscalemode automático aplicacion ajuste ajustar adaptar c# winforms textbox restore repaint

c# - tamaño - Restaurar WinForm con un cuadro de texto que contiene gran cantidad de datos



redimensionar controles al maximizar c# (2)

Encontrado el problema !!! El problema estaba relacionado con la propiedad Anchor del cuadro de texto. una vez que lo eliminé, la restauración de la ventana fue inmediata. Por cierto, la nueva clase personalizada no es necesaria

Creé un formulario en C # (VS2010) que contiene (entre otros) un control de cuadro de texto. El cuadro de texto puede contener una gran cantidad de datos en algún momento (~ 3 millones de caracteres).

Al desplazar o mover el formulario, no se encuentran problemas, pero cuando se minimiza la forma y se restaura de nuevo, se desencadena una secuencia de repintado (creo) que causa un gran retraso de alrededor de 5-10 segundos para que se vuelva a pintar el formulario.

Ya he intentado varias soluciones:

  1. Uso de doble buffer: según lo que he leído, el doble buffer se aplica solo al formulario en sí y no a sus controles

    this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true);

  2. Al deshabilitar el recuadro de texto se redibujó una vez minimizado usando: SendMessage(this.my_textBox.Handle, WM_SETREDRAW, false, 0); y se restablece la habilitación de nuevo después de la forma. Me di cuenta de que el retraso en el repintado del formulario también existe si no vuelvo a habilitar el repintado de la caja de texto .

  3. Doble buffer manual usando un mapa de bits - resultados similares a # 1.

Leí en alguna parte que este problema podría estar relacionado con el control del cuadro de texto que intenta contraerse o ajustarse a la cantidad de datos, pero no pude anularlo.

Anteriormente tenía el mismo proyecto en MFC, pero no encontré ningún problema de repintado o retraso.

Por favor, avíseme cómo resolver este problema.


Es posible que no esté entendiendo algo (o tal vez haya una razón por la que no puedes hacer esto), ¿pero no puedes derivar tu propia clase TextBox de esa manera?

public class MyTextBox : TextBox { public MyTextBox() : base() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); SetStyle(ControlStyles.ResizeRedraw, false); } }

Y luego usarlo en lugar de un cuadro de texto normal?