Diferencia entre los eventos de cambio de tamaño y SizeChanged


En C#. net en Winforms, Encontré dos eventos en casi todos los componentes, Resize () y SizeChanged (). Hay alguna diferencia entre ellos? Si ambos eventos son los mismos, ¿por qué C# ha proporcionado dos eventos diferentes?

Estoy creando un control de usuario en C#. Este control contiene un cuadro de texto. Quiero cambiar el tamaño del cuadro de texto cuando el usuario cambie el tamaño del control. Estoy confundido acerca de qué evento debo usar y por qué?

Author: Jeff, 2011-09-16

3 answers

El evento Resize ocurre cuando se cambia el tamaño del control, mientras que el evento SizeChanged ocurre cuando cambia la propiedad Size.

Puede usar cualquiera, ya que un cambio de tamaño hará que cambie la propiedad Size. Sin embargo, debería usar el evento Layout, como se recomienda tanto en la documentación para los eventos Resize y SizeChanged.

 22
Author: Guffa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-16 07:31:46

Entonces, ¿cuál es la diferencia entre el cambio de tamaño y los eventos SizeChanged?

Lo creas o no absolutamente nada. Un método llama al otro. Sin embargo, debido a que este último se llama "Changed", se puede usar para datos vinculante-así que mientras no tengo ninguna prueba concreta, esa es mi teoría sobre por qué ambos existen.

 14
Author: Muhammad Hasan Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-16 07:52:24

A veces estas respuestas solo provienen del código fuente:

SizeChanged

El SizeChanged evento es planteado por el OnSizeChanged(). Esta función es a su vez solo llamada por UpdateBounds(), que es llamada por varios mecanismos, principalmente incluyendo el manejo de WM_MOVE y WM_WINDOWPOSCHANGED mensajes.

De nuevo desde la fuente, OnSizeChanged() solo se llamará cuando UpdateBounds() haya determinado que hay una diferencia entre el tamaño antiguo y nuevo tamaño. Así que, sí, como los demás ya han determinado, el evento SizeChanged corresponde a la propiedad Size cambiando.

Redimensionar

El Resize el evento es diferente, pero no por mucho. Es criado por OnResize(). Esta función se llama como resultado directo de OnSizeChanged(). Sin embargo, lo contrario no es cierto. Es decir, OnResize() NO llame OnSizeChanged().

La diferencia radica en la perspectiva desde la que se utiliza si simplemente se está suscribiendo a estos eventos, entonces prácticamente no hay diferencia. De cualquier manera que lo mires, cada vez que se cambia el tamaño del control, ambos eventos se disparan.

Sin embargo, si usted está heredando Control, uno debe ser consciente de las siguientes diferencias:

La razón por la que uno podría preocuparse, por ejemplo, es asegurarse de que su lógica se ejecuta antes de la implementación base (y por lo tanto antes de invalidar) para ser dibujado correctamente a la pantalla.

LocationChanged and Move{[34]]}

Estos son dos eventos de movimiento que son paralelos SizeChanged y Resize casi idénticos. Las excepciones son que OnMove() sólo invalida cuando el estilo, ControlStyles.SupportsTransparentBackColor es true y el color es menos opaco alfa valor. Y, OnMove() no activará un diseño.

Nuevamente esta diferencia probablemente solo importa para controlar a los autores.

Conclusiones

Después de investigar el código fuente, mi conclusión es que los eventos Resize y Move son una abstracción lejos de la propiedad changed events, y probablemente sería la opción preferida tanto para suscribir como para anular estos eventos específicos.

Como otros mencionan, el Layout evento y OnLayout() las funciones también son una opción decente; sin embargo, los diseños pueden ocurrir en muchos casos:

  • Cuando se agregan/eliminan controles secundarios.
  • Cuando los límites del control cambian.
  • Cuando otros cambios ocurre que puede afectar el diseño del control.

    Nota al Margen: "Otros cambios" es vaga, pero supongo que Microsoft se refiere a cualquier acción tomada por los herederos que requieren una diseño.

Confiar demasiado en los eventos de diseño puede ralentizar su código/control, ya que ocurrirán con más frecuencia de lo que ocurriría un simple evento de cambio de tamaño. O bien, es posible que el motor de diseño se suspenda por SuspendLayout(), En este caso, no podrá reaccionar a los cambios de tamaño a través del evento Layout.

 6
Author: Nick Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-03 16:50:01