2010-06-21 3 views
11

È possibile eseguire un'azione specifica dopo l'evento di ridimensionamento (del controllo utente), ad esempio quando viene rilasciato il pulsante del mouse? Ho bisogno di ridimensionare manualmente un controllo interno e farlo su ogni monocottura della manifestazione sarebbe abbastanza, hmm, inefficiente ...WinForms - azione dopo l'evento di ridimensionamento

+0

Esistono modi migliori per eseguire il layout del controllo. – leppie

+0

Lo so e non lo farei in questo modo, ma è un piccolo caso speciale;) – brovar

+0

Qualcosa non va con l'evento 'Control.Resize'? – leppie

risposta

9

Basta utilizzare l'evento ResizeEnd:

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

Da MSDN:

l'evento ResizeEnd viene generato quando l'utente termina ridimensionare una forma, tipicamente trascinando uno dei bordi o il riquadro di ridimensionamento situata sul nell'angolo inferiore destro il modulo, e quindi rilasciandolo. Per ulteriori informazioni su sull'operazione di ridimensionamento .

+0

Molto allettante e probabilmente l'avrei già usato, ma sta accadendo nel controllo utente (ho dimenticato di specificarlo, scusa) e non ho accesso agli eventi del modulo. – brovar

+0

@brovar: Questo è baloney! Ogni controllo ha una proprietà 'ParentForm'. Quindi in effetti hai tutto ciò che è accessibile! – leppie

+0

@Perché non è sufficiente aggiungere un metodo 'ResizeMeNow()' al controllo utente e chiamarlo nell'evento 'ResizeEnd' del modulo? – GenericTypeTea

0

Forse è possibile utilizzare l'evento SizeChanged. Ma non so quanto spesso o quando viene chiamato durante il ridimensionamento.

+0

Proprio come Ridimensiona, di volta in volta. – brovar

1

È possibile simulare una ResizeEnd locale come questo:

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 
     //... 
    } 

} 

L'intervallo può essere modificato. Più è alto il ritardo dopo l'ultimo evento di ridimensionamento che sarà.