Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#] - .invalidate jednego panelu - miga tez panel który jest pod nim

Piotrus_999 17 Mar 2016 21:11 417 4
  • #1 17 Mar 2016 21:11
    Piotrus_999
    Poziom 40  

    Witam!

    Jestem załkowicie zielony c#

    Mam taki problemik

    Mam 2 panele - jeden zapewnia tło (bitmapa) na drugim rysuje wykres.

    Kiedy chce odswierzyc tylko ten drugi poprzez invalidate() przerysowuje mi wszystko i strasznie miga :)

    Czy da sie jakos zrobić aby nie migalo?

    0 4
  • Pomocny post
    #2 17 Mar 2016 21:17
    marcinj12
    Poziom 40  

    Na pewno nie zaszkodzi ustawienie w formie DoubleBuffered na True.
    Wykresowi można ustawić obrazek-tło przez właściwość BackImage - wykorzystujesz ją? ChartAreas ma z kolei BackColor, które można z kolei ustawić na Transparent.
    Natomiast pytanie zasadnicze - po co przerysowywać wykres? On się samo powinien odświeżać. Wklej kod, a najlepiej przykładowy projekt, bo może coś źle robisz.

    0
  • #3 17 Mar 2016 22:08
    Piotrus_999
    Poziom 40  

    To mój pierwsz projekt w C#

    Generealnie jest to wizualizacja wyników przesyłanych w czasie prawie rzeczywistym przez uC. Jak dostaje paczkę danych przez serial port to rysuje i chce aby to sie wyswietliło. Dlatego robię invalidate. Moze to zle podejscie - ale jestem zielony w c# i raczej pisze "na czuja" niz tak naprawde rozumiejąć co sie dzieje :)

    Zrobilem sobie jeden panek z bitmapą backgroundem a nad nim drugi z parametrem transparent.

    Jak przerysowuje to miga.

    Teraz dla testu (aby nie miec podłaczonego ukladum z którego czytam) zrobiłem sobie MouseClick handler aby testować rysowanie tylko jednej losowej linii w panelu wykresu.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #4 18 Mar 2016 00:50
    marcinj12
    Poziom 40  

    Widzę, że zacząłeś coś próbować z DoubleBuffer dla panela - słuszna droga, choć z wykonaniem gorzej ;)
    Doklej po InitializeComponents() takie coś:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    i zasadniczo to powinno pomóc na "miganie".
    Ale: zdaje się, że źle podszedłeś do tematu....
    W pierwszym kroku - przyglądałeś się gotowej kontrolce Chart? Ma mnóstwo konfigurowalnych opcji i jest dosyć intuicyjna, myślę, że mógłbyś ją dostosować pod swoje potrzeby. Zawsze lepiej użyć gotowego komponentu niż samemu coś tworzyć.

    W drugim kroku - po co dwa panele? Można rysować wszystko na jednym... W pierwszym kroku możesz wyrysować na nim bitmapę - nawet tak jak masz w tej chwili - a w drugim - rysować wykres. Możesz też zrezygnować z bitmapy i rysować wszystko w jednym zdarzeniu panel_Paint.

    Wyrzuć też wszystkie deklaracje Pen ze zdarzenia na górę klasy, pod te zmienne (których nie musisz deklarować jak static).
    Poniżej masz taki lekko poprawiony kod, rysujący wszystko w jednym zdarzeniu na jednym panelu:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #5 18 Mar 2016 01:14
    Piotrus_999
    Poziom 40  

    Dzieki bardzo.

    Udało sie dzieki!

    Sam doczytałem tez o ustawieniu double buffer do panelu.

    C# usiadlem dzis po raz pierwszy w życiu.

    Jest bałagan ale wynika on z tego ze eksperymentuje, baddam, zmieniam itd.

    Bardzo dziękuę za pomoc.

    Kontrolką chart na pewni sie zainteresuje (nawet nie wiedzalem ze istnieje :))

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo