2010-06-21 3 views
11

Ist es möglich, eine bestimmte Aktion nach das Resize-Ereignis (des Benutzersteuerelements), zum Beispiel, wenn die Maustaste losgelassen wird, durchzuführen? Ich muß manuell eine innere Kontrolle der Größe und auf jedem einzelnen Abfeuern der Veranstaltung zu tun wäre ganz, hmm, ineffizient ...WinForms - Aktion nach Resize-Ereignis

+0

Es gibt bessere Möglichkeiten, das Steuerungslayout zu erstellen. – leppie

+0

Ich weiß, und ich würde das nicht so machen, aber es ist ein kleiner Sonderfall;) – brovar

+0

Alles falsch mit dem 'Control.Resize' Event? – leppie

Antwort

9

einfach das ResizeEnd Ereignis verwenden:

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

Von MSDN:

das ResizeEnd Ereignis wird ausgelöst, wenn der Benutzer beendet eine Form Skalieren, typischerweise durch auf die rechte untere Ecke einen der Ränder oder das Größenzieh ziehen von das Formular, und dann loslassen. Für weitere Informationen Informationen über die Größenänderung Betrieb.

+0

Sehr verlockend und ich würde es wahrscheinlich schon benutzt haben, aber es passiert in der Benutzerkontrolle (ich habe vergessen dies anzugeben, tut mir leid) und ich habe keinen Zugriff auf die Ereignisse des Formulars. – brovar

+0

@brovar: Das ist Quatsch! Jedes Steuerelement verfügt über eine 'ParentForm'-Eigenschaft. Sie haben also alles zugänglich! – leppie

+0

@Warum können Sie nicht einfach eine 'ResizeMeNow()' -Methode zum Benutzersteuerelement hinzufügen und sie beim Ereignis 'ResizeEnd' des Formulars aufrufen? – GenericTypeTea

0

Vielleicht können Sie das SizeChanged Ereignis verwenden. Aber ich weiß nicht, wie oft oder wann es während der Größenanpassung aufgerufen wird.

+0

Genau wie Resize, immer wieder. – brovar

1

Sie können fälschen lokalen ResizeEnd wie folgt aus:

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

} 

Das Intervall kann geändert werden. Je höher es ist, desto mehr Verzögerung wird es nach dem letzten Resize-Ereignis sein.