Zdarzenie na obrazku

0

Witam,

Mam pewien problem i nie bardzo wiem jak go rozwiązać. Mam nadzieję, że pomożecie :) Chcę to zrobić na formsach.

Otóż, załóżmy że mam zdjęcie samochodu zrobione aparatem (widok z boku). I chciałbym, aby po kliknięciu w programie na przednie drzwi kierowcy załadowało się kolejne zdjęcie (ukazujące ten sam widok samochodu z boku, tyle że z otwartymi drzwiami oczywiście - także zrobione wcześniej aparatem). I to samo z kliknięciem na tylne drzwi samochodu (ma się wgrać zdjęcie z otwartymi tylnymi drzwiami), itd.

W jaki sposób można się za to zabrać?

Za wszelkie sugestie i porady z góry bardzo dziękuję! :)

Pozdrawiam

1

Jeżeli masz zdarzenie Click na tym obrazku to możesz pobrać pozycję kursora względem niego z parametru, sprawdzać w jakim regionie został obrazek kliknięty i odpowiednio go zmienić. To jest gorsza opcja. Ta lepsza to nałożenie na ten obrazek jakichś przeźroczystych paneli, utworzenie im zdarzenia Click i w zależności od tego który panel został kliknięty, odpowiednio przeładowywać ten samochód. To jest wydaje mi się wygodniejsza opcja.

0

Dzięki za poradę :) Doszedłem jeszcze do klasy GraphicsPath, która właśnie bardzo jest przydatna przy tego typu zabiegach. Zaznaczam w niej punkty (obszar, który ma być aktywny). I potem w zdarzeniu MouseClick w picturebox sprawdzam metodą IsVisible() czy klinąłem w tą 'aktywną' powierzchnię. Poniżej kod o którym mówię.

GraphicsPath gp = GraphicsPath(); 
Point[] punkty_prostokat = {    new Point(0,0),
                                        new Point(0,50),
                                        new Point(50,50),
                                        new Point(50,0)
                                   };

private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            gp.AddLines(punkty_prostokat);
        }

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {

                pictureBox1.Refresh();

                if(gp.IsVisible(e.Location))
                        pictureBox1.Image = Properties.Resources._1;
            }
        }

Hmm, mam teraz pewien problem i cały czas się zastanawiam jak go rozwiązać, żeby było optymalnie i w miarę dynamicznie się to wszystko robiło (chodzi mi o to, żeby zapobiec pisaniu wieeelu ifów, które będą sprawdzały jaki aktualne jest zdjęcie w picturebox).

Mianowicie moim założeniem tego projektu jest to, abym mógł samochód pootwierać z każdej strony, mógł otworzyć bagażnik, maskę itd. Oczywiście na zdjęciach wcześniej zrobionych no i to już wiem jak zrobić.

Teraz pozostaje mi tylko kwestia tego, że praktycznie przy każdym zdjęciu będą musiały być inne 'aktywne powierzchnie' (tablice punktów lub coś takiego). No i problem zaczyna się, gdy muszę porównywać jaki obrazek jest aktualnie w pictureboxie i do niego wgrywać te nowe 'aktywne powierzchnie' i anulować stare.

Brak mi trochę pomysłu, oczywiście mogę to zrobić dziesiątkami ifów i przy każdym tworzenie nowych punktów ale chyba nie o to chodzi w programowaniu obiektowym, żeby robić wszystko tak na 'sztywno'.

Bardzo liczę na Wasze porady i sugestie! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1