2010-01-14 12 views
7

Dodałem zdarzenia zmiany rozmiaru do jednego z moich widżetów, który wygląda tak:. Zmiana rozmiaru zdarzenia .NET: stary rozmiar?

void glControl_Resize(object sender, EventArgs e) { 

Czy istnieje sposób mogę uzyskać starą rozmiar widgetu (przed zmiana rozmiaru)? Może mogę rzucić e coś, co da mi więcej informacji? A może powinienem go zapisać podczas tego wydarzenia?

+0

Jeśli chcesz wydarzenie ** przed ** zmiana rozmiaru jest faktycznie wykonywana przez system Windows przesłonić 'WndProc' i uchwycić odpowiedni komunikat. Nie jestem pewien, który dokładnie. Ale jest to jedyny sposób na uzyskanie ** przed zmianą rozmiaru **. – n4pgamer

Odpowiedz

12

Tak, samo śledzenie starego rozmiaru w polu klasy jest prostym rozwiązaniem. Na przykład:

Size mOldSize; 

private void glControl_Resize(object sender, EventArgs e) { 
    if (mOldSize != Size.Empty && mOldSize != glControl.Size) { 
    // do something... 
    } 
    mOldSize = glControl.Size; 
} 
2

Zgodnie z konwencją należy dodać zdarzenie OnResizing, które jest uruchamiane zaraz po zmianie, ale się nie zmieniło, a następnie zostanie zwolnione po zmianie rozmiaru na OnResize. Otrzymasz starą wartość ze swojego EventArg w wydarzeniu OnResizing.

Edit:

Czy tworzysz własne wydarzenie lub wypalanie jednego z dołączonym kontrolą?

Jeśli robisz własne wydarzenie, możesz uzyskać od EventArg i zrobić coś w rodzaju ResizeEventArg, które zawiera rozmiar rzeczy, którą chcesz.

Chciałbym użyć ResizeEventArg dla zdarzeń Resize i OnResizing i nadal śledzić to, co powiedziałem wcześniej.

Lub jeśli wiesz, jaki to rodzaj kontroli, możesz rzucić Object sender w typ, a następnie przeczytać właściwość.

+0

Nie tworzę własnego wydarzenia. I nie ma wydarzenia "OnResizing"? Wydaje się, że nic nie ma wydarzenia "OnResizing"? Widzę 'ResizeBegin' na moim głównym formularzu, ale jest to' Tao.Platform.Windows.SimpleOpenGlControl', który wydaje się nie mieć. Zgadnij, że jestem snooker. Dzięki i tak. Dobry na przyszłość. – mpen