2010-07-07 17 views
5

Nie jestem pewien, co jest najlepszym sposobem korzystania z grafiki - należy załączyć moje zajęcia do turnieju głównego forma farbą, a następnie wykonaj rysunek, czy lepiej jest zadzwonić z overidden OnPaint pustki jak to? To znaczy, to jest OK, to zrobić tak:C# WinForms - farba pytania metoda

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e) //what is this good for? My app works without it as well 
    Graphics g=e.Graphics; 
    DrawEnemies(g); 
    UpdateHUD(g); 
    DrawSelectedUnit(g); 
} 
+4

'OnPain' nie będzie kompilował, chyba że jest to faktycznie podklasa klasy, która wspiera bycie fizycznie torturowanym;) – Thomas

+2

Aw @ Thomas, mógłbyś właśnie to edytować. – Lazarus

+1

Nah. Jestem na to zbyt dowcipny. (Również, byłem niedawno naganę do edycji oczywisty kopiuj/wklej błąd w czyimś kodzie, ale to nie był powód, że powstrzymał się od edycji tutaj.) – Thomas

Odpowiedz

6

Zaleca się, że kontrole przesłonić metody On... zamiast zapisać się do własnych wydarzeń.

Należy zadzwonić pod numer base.OnPaint, aby upewnić się, że metoda Paint jest prawidłowo uruchomiona.

From MSDN:

Sposób OnPaint umożliwia również klasy pochodnych do obsługi zdarzenia bez dołączania pełnomocnika. Jest preferowana technika obsługi zdarzenia w klasie pochodnej.

Uwagi do spadkobierców
Kiedy przesłanianie OnPaint w klasie pochodnej, należy wywołanie klasy bazowej OnPaint metoda tak że zarejestrowanych delegatów odbierać imprezy.

+0

zazwyczaj nadrzędnymi OnPaint nie trzeba do ognia zdarzenia malowania już tak base.OnPaint nie jest obowiązkowe. MSDN mówi, ale nie wszystko musi dokładnie nadążyć. W podobny sposób przesłonisz OnBackgroundPaint i komentarz base.OnBackgroundPaint NOT base nie odświeża tła - przed migotaniem. – serhio

+0

@serhio: Sposobem na zapobieganie tła malowanie jest nie do zastąpienia OnBackgroundPaint (to stara szkoła metoda brute force przeniesione z Win32). Zamiast tego powinieneś ustawić styl Kontroli tak, by zawierał "AllPaintingInWmPaint". –

+0

Od MSDN: 'Podczas nadpisywania OnPaintBackground w klasie pochodnej nie jest konieczne wywoływanie OnPaintBackground klasy podstawowej. Http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaintbackground. aspx – serhio

3

To naprawdę nie ma znaczenia; obie działają. Nadpisywanie OnPaint może być teoretycznie trochę szybsze, ale nie ma znaczenia, że ​​ktokolwiek to zauważy. Microsoft zaleca nadpisanie OnPaint, ale tak naprawdę nie motywuje tego.

Należy zadzwonić pod numer base.OnPaint, ponieważ ta metoda wywoła procedury obsługi dołączone do zdarzenia Paint.