2010-06-21 14 views
11

¿Es posible realizar una acción específica después de el evento de cambio de tamaño (del control de usuario), por ejemplo cuando se suelta el botón del mouse? Tengo que cambiar manualmente el tamaño de un control interno y hacerlo en cada activación del evento sería bastante, hmm, ineficiente ...WinForms - acción después del evento de cambio de tamaño

+0

Hay mejores formas de hacer el diseño de control. – leppie

+0

Lo sé y no lo haría de esa manera, pero es un pequeño caso especial;) – brovar

+0

¿Hay algún problema con el evento 'Control.Resize'? – leppie

Respuesta

9

sólo tiene que utilizar el evento ResizeEnd:

private void Form1_ResizeEnd(object sender, EventArgs e) 
{ 
    // Your code here 
} 

De MSDN:

el evento ResizeEnd se eleva cuando el usuario acaba de cambiar el tamaño de un formulario, típicamente arrastrando uno de los fronteras o el control de tamaño situado en la esquina inferior derecha de el formulario, y luego liberándolo. Para obtener más información sobre el cambio de tamaño operación.

+0

Muy tentador y probablemente ya lo haya usado, pero está sucediendo en el control de usuario (olvidé especificar eso, lo siento) y no tengo acceso a los eventos del formulario. – brovar

+0

@brovar: ¡Eso es una tontería! Cada control tiene una propiedad 'ParentForm'. ¡De hecho, tienes todo lo accesible! – leppie

+0

@ ¿Por qué no puede simplemente agregar un método 'ResizeMeNow()' al control de usuario y llamarlo en el evento 'ResizeEnd' del formulario? – GenericTypeTea

0

Quizás pueda utilizar el evento SizeChanged. Pero no sé con qué frecuencia o cuándo se llama durante el cambio de tamaño.

+0

Igual que Resize, una y otra vez. – brovar

1

Usted puede fingir un ResizeEnd local de la siguiente manera:

public class Dummy:UserControl 
{ 

    private readonly Timer _tDelayedResize; 

    public Dummy() 
    { 
     this.Resize += this_Resize; 
     _tDelayedResize = new Timer(); 
     _tDelayedResize.Interval = 5; 
     _tDelayedResize.Tick += this_ResizeEnd; 
    } 

    void this_Resize(object sender, EventArgs e) 
    { 
     _tDelayedResize.Stop(); 
     _tDelayedResize.Start(); 
    } 

    void this_ResizeEnd(object sender, EventArgs e) 
    { 
     _tDelayedResize.Stop(); 

     //Do your ResizeEnd logic here 
     //... 
    } 

} 

El intervalo puede ser modificado. Cuanto mayor sea, mayor será la demora después del último evento de cambio de tamaño.

Cuestiones relacionadas