Czym jest DoubleBuffer, opcja, którą można ustawić dla formy w ustawieniach elementu.
Podczas buforowania grafiki można zmniejszyć lub wyeliminować migotania powodowane przez stopniowe rendering części powierzchni wyświetlanych. Buforowana grafika wymaga najpierw zapisywania danych zaktualizowanych do buforu. Dane w buforze grafiki szybko są następnie zapisywane do wyświetlanych powierzchni pamięci. Względnie szybkie przełączenie pamięci grafiki wyświetlanej zazwyczaj zmniejsza migotania, które w przeciwnym razie może wystąpić.
Jest możliwość ustawienia takiej opcji również dla Panelu lub PictureBoxa. Jeśli dopiero zaczynacie przygodę z programowaniem, na pewno tworzenie obiektów, których nie widać może sprawiać ci problem, łatwiej jest układać gotowe elementy, przeciągać je na formie itp. Częstym problemem, na jaki możemy natrafić, gdy położymy zbyt dużo paneli lub pictureboxów jest ich miganie, szczególnie gdy ich tło jest przezroczyste. Przykład takiego migania prezentuje poniżej:
bez doublebuffera:
z doublebufferem
Mam nadzieję, że widzieliście takie białe miganie na pierwszym gifie. Jeśli mamy wiele obiektów i każdy z nich wykorzystuje jakąś formę grafiki lub zamieniane jest jego tło, lub obrazek w sposób dynamiczny, element taki, może mignąć na biało. Jeśli elementów jest mało, efekt migotania może być niewidoczny, niekiedy wystarczy ustawić opcję DoubleBuffer dla formy i to załatwia sprawę. Jak jednak użyć połączonych elementów Panel i DoubleBuffer.
Należy najpierw utworzyć nową klasę i jakoś sensownie ją nazwać, moja klasa będzie nazywała się „DoubleBufferPanel”:
Aby nasz nowy panel miał cechy starego panelu, należy posłużyć się dziedziczeniem. Jest to jedna z kluczowych cech języków programowania obiektowego (OOP). Dziedziczność to możliwość wykorzystania wszystkich funkcji istniejącej klasy i rozszerzenia tych możliwości bez ponownego pisania oryginalnej klasy. W programie Visual Basic .NET można dziedziczyć klasy, które zawiera Microsoft .NET Framework, a także utworzone nowe klasy.
Naszą klasę wypełnimy kodem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Public Class DoubleBufferPanel 'dziedziczymy elementy panelu Inherits Panel Public Sub New() 'domyślnie Me.DoubleBuffered = True 'ustalamy styl rysowania elementów obiektu Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True) 'ustawiamy styl Me.UpdateStyles() End Sub End Class |
Takim sposobem, możemy tworzyć nowe panele za pomocą”
1 |
Dim dbPanel As New DoubleBufferPanel |
Lub po uruchomieniu, pojawi się nam w ToolBoxie opcja
Panel taki możemy przeciągnąć na formę i ręcznie modyfikować.