Kolejność wykonywania polecen w metodzie

0

Witam

Wczoraj, pisząc kolejny program zaliczeniowy natknąłem się na ciekawy problem, opisu którego nie potrafię nigdzie znaleźć.

 Otóż program ma w skrócie pozwalać na manipulowanie obiektami geometrycznymi  na płaszczyźnie graficznej.

Jeden z elementów jaki chciałem zastosować to zmiana tła płaszczyzny graficznej już po wyrysowaniu figur.
Oczywiście kolejne rysowane figury zachowują się dokładnie tak jakbym rysował kredkami po papierze.
Żeby zmienić kolor kartki poprzednią muszę wywalić i przenieść moje obiekty na nową...

Postanowiłem że zrobię to w najprostszy możliwy sposób = użyję do tego zdarzenia button_click, no i wydaję polecenie:

pb_DrawArea.Clear(Color.FromKnownColor(KnownColor.Control));

powodując, że kontrolka zostaje wymalowana kolorem standardowym "Control", a w kolejnym wierszu, chcę oczywiście ponownie wymalować moje obiekty tak jak zostały utworzone. Z zachowaniem położenia, koloru, grubości i rodzaju linii. Dodaję więc polecenie:

int pb_długośćTablicy = pb_dgwAktualnaListaObiektów.Rows.Count;

  for (int pb_i = 0; pb_i < pb_długośćTablicy; pb_i++)
     {
        pb_TablicaFigurGeometrycznych[pb_i].pb_CMRysujFigura();
     }

... bo oczywiście użyłem tablicy obiektów do przechowywania wszelkich informacji o tych elementach...
i jakież było moje zdziwienie, gdy w wyniku otrzymałem tylko czystą plansze graficzna w kolorze "Control"

Oczywiście sprawdziłem czy się nie pomyliłem, i czy użyta pętla z metodą rysuj działa sama w sobie. Rozbiłem polecenie na 2 przyciski, teraz wszystko było ok. Tło zostało wyczyszczone, a po naciśnięciu 2-go buttona ponownie wyrysowało figury.

a teraz pytanie

Dlaczego w jednej metodzie obsługi buttona nie działa mi to poprawnie i czy jest jakiś sposób aby to zadziałało.

0

Jeżeli w metodzie Paint malujesz te figury to wystarczy dać: pb_DrawArea.Invalidate();
Jeżeli nie to pokaż kod.

0

Rysowanie odbywa się na bazie nadrzędnego konstruktora klasy w formie:

    class pb_CMFigura : pb_TestowaPlanszaGraficzna
    {
        // wywołanie i ustanienie niezbędnych zmiennych wspólnych dla wszystkich klas
        protected int pb_CMX1;
        protected int pb_CMY1;
        protected int pb_CMPromień;
        protected int pb_CMGrubośćLinii;
        protected Color pb_CMKolorObiektu;
        protected DashStyle pb_CMRodzajLinii ;

        // przypisanie pobranych wartości do zmiennych dla klas pochodnych 3 elentowych
        public pb_CMFigura(int pb_Cx1, int pb_Cy1, Graphics pb_PlanszaGraficzna)
        {
            this.pb_CMX1 = pb_Cx1;
            this.pb_CMY1 = pb_Cy1;
            pb_DrawArea = pb_PlanszaGraficzna;
        }

        // przypisanie pobranych wartości do zmiennych dla klas pochodnych 4 elementowych
        public pb_CMFigura(int pb_Cx1, int pb_Cy1, Graphics pb_PlanszaGraficzna, Color pb_CKolorObiektu)
        {
            this.pb_CMX1 = pb_Cx1;
            this.pb_CMY1 = pb_Cy1;
            this.pb_CMKolorObiektu = pb_CKolorObiektu;
            pb_DrawArea = pb_PlanszaGraficzna;
        }

        // przypisanie pobranych wartości do zmiennych dla klas pochodnych 6 elementowych
        public pb_CMFigura(int pb_Cx1, int pb_Cy1, Graphics pb_PlanszaGraficzna, Color pb_CKolorObiektu, int pb_CGrubośćLinii, DashStyle pb_CRodzajLinii)
        {
            this.pb_CMX1 = pb_Cx1;
            this.pb_CMY1 = pb_Cy1;
            this.pb_CMKolorObiektu = pb_CKolorObiektu;
            this.pb_CMRodzajLinii = pb_CRodzajLinii;
            this.pb_CMGrubośćLinii = pb_CGrubośćLinii;
            pb_DrawArea = pb_PlanszaGraficzna;
        }

        // przypisanie pobranych wartości do zmiennych dla klas pochodnych 7 elementowych
        public pb_CMFigura(int pb_Cx1, int pb_Cy1, Graphics pb_PlanszaGraficzna, Color pb_CKolorObiektu, int pb_CGrubośćLinii, DashStyle pb_CRodzajLinii, int pb_CPromień)
        {
            this.pb_CMX1 = pb_Cx1;
            this.pb_CMY1 = pb_Cy1;
            this.pb_CMKolorObiektu = pb_CKolorObiektu;
            this.pb_CMRodzajLinii = pb_CRodzajLinii;
            this.pb_CMGrubośćLinii = pb_CGrubośćLinii;
            this.pb_CMPromień = pb_CPromień;
            pb_DrawArea = pb_PlanszaGraficzna;
        }

        // przypisanie wartości zmienych graficznych ponranych w formularzu pb_Form1
        public void pb_CMPobierzDane()
        {
            pb_CMGrubośćLinii = pb_WybranaGrubośćLinii;
            pb_CMKolorObiektu = pb_KolorObiektu;
            pb_CMRodzajLinii = pb_WybranaLinia;
        }
        
        // przypisanie wartości tylko do zmienej KolorObiektu
        public void pb_CMPobierzKolorObiektu()
        {
            pb_CMKolorObiektu = pb_KolorObiektu;
        }

        // metoda virtualna rysowania obiektu
        public virtual void pb_CMRysujFigura()
        { }

        // metoda virtualna usuwania wybranego obiektu
        public virtual void pb_CMWymażFigura()
        { }

        // zmiana parametrów położenia
        public void pb_PrzesuńDoXY(int pb_Cx1, int pb_Cy1)
        {
            pb_CMX1 = pb_Cx1;
            pb_CMY1 = pb_Cy1;
        }
    }

poprzez metodę ovverride klasy pochodnej - np:

class pb_CPunkt : pb_CMFigura
    {
        // deklaracja specyficznej zmiennej lokalnej
        protected int pb_PromieńPunktu = 5;

        // deklaracka konstruktora klasy punkt z odwolaniem do 3 elementowego konstruktora w klasie nadrzędnej
        public pb_CPunkt(int pb_Cx1, int pb_Cy1, int pb_CPromień, Color pb_CKolor, Graphics pb_PlanszaGraficzna)
            : base(pb_Cx1, pb_Cy1, pb_PlanszaGraficzna)
        {
            pb_PromieńPunktu = pb_CPromień;
            pb_DrawArea = pb_PlanszaGraficzna;
            this.pb_CMGrubośćLinii = pb_WybranaGrubośćLinii;
        }

        // metoda rysujaca obiekt nadpisująca metodę rysuj w klasie nadrzdej
        public override void pb_CMRysujFigura()
        {
            //pb_CMKolorObiektu = pb_KolorObiektu;
            SolidBrush pb_CMazak = new SolidBrush(pb_CMKolorObiektu);
            pb_DrawArea.FillEllipse(pb_CMazak, pb_CMX1 - pb_PromieńPunktu, pb_CMY1 - pb_PromieńPunktu, 2 * pb_PromieńPunktu, 2 * pb_PromieńPunktu);
            pb_CMazak.Dispose();
        }

        // metoda wymazująca obiekt nadpisująca metodę z klasy nadrzędnej
        public override void pb_CMWymażFigura()
        {
            if (pb_Index > -1)
            {
                SolidBrush pb_CMazak = new SolidBrush(pb_ReferencjaForm1.pb_PlanszaGraficzna.BackColor);
                pb_DrawArea.FillEllipse(pb_CMazak, pb_CMX1 - pb_PromieńPunktu, pb_CMY1 - pb_PromieńPunktu, 2 * pb_PromieńPunktu, 2 * pb_PromieńPunktu);
                pb_CMazak.Dispose();
            }
        }
    }

a dane do formularza pobierane są albo z generatora losowego albo z formularza i wyrysowywane na kontrolce PictureBox poprzez wywolanie klasy jako nowego elementu tablicy:

pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CPunkt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Promień, pb_KolorObiektu, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();

kolejne obiekty zapamiętywane są na kolejnych miejscach tablicy, i do tej tablicy odwołuję się ponownie je rysując:

public void pb_RysujOdNowa()
        {
            int pb_długośćTablicy = pb_dgwAktualnaListaObiektów.Rows.Count;
            for (int pb_i = 0; pb_i < pb_długośćTablicy; pb_i++)
            {
                pb_TablicaFigurGeometrycznych[pb_i].pb_CMRysujFigura();
            }
        }

naprawdę nie ma żadnego logicznego powodu, żeby nie działało to zgodnie z logika, a nie działa...

Oczywiście

pb_PlanszaGraficzna.Invalidate();

nie działa :-)

(pb_PlanszaGraficzna - to własciwa nazwa kontrolki)

0

Do tego w pb_DrawArea w zdarzeniu Paint wywołaj pb_RysujOdNowa()

0

Ja to wywołuje wprost:

private void pb_btZmieńKolorTła_Click(object sender, EventArgs e)
        {
            pb_PlanszaGraficzna.BackColor = pb_tbKolorWypełnienia.BackColor; // zmiana koloru tła na nowe, czyli zamazanie wszystkiego co tam wcześniej było
            pb_PlanszaGraficzna.Invalidate(); // dodałem po Twojej sugestii, ale nie działa...
            pb_RysujOdNowa(); // wywołanie metody pobierającej kolejne elementy z tablicy obiektów i rysujące je na pb_PlanszaGraficzna od nowa
        }

jak rozbije te polecenia, czyli wyczyszczenie dam na 1 button, a malowanie od nowa na 2-gi, wszystko jest ok, jak tylko połącze w 1 zdarzenie Button_Click - nie działa. Dostaje tylko kontrolkę ze zmienionym kolorem.

0

nie!
pb_RysujOdNowa(); ma być w zdarzeniu Paint dla pb_PlanszaGraficzna

0

ok i w odpowiedzi dostaje, ze nie można niejawnie przekonwertować typu void na System.Windows.Forms.Paint.EventHandler..

a z opisu wynika, ze zeczywiści aby zwolnic obszar nalezy uzyc go bezparametrowo w formie

pb_PlanszaGraficzna.Paint += Invalidate();
1

Człowieku mów którego słowa nie rozumiesz, bo ja cię mówię w zdarzeniu Paint wywołać pb_RysujOdNowa();
zaś próbujesz podpiąć pod delegata Paint Invalidate(); naprawdę nie widzisz różnicy?

0

Wybacz, ale ja rzeczywiście nie rozumiem.

Siedzę teraz i czytam o metodzie Paint, ale nie wiem jak wywołać poprawnie moją metodę w zdarzeniu Paint.
Jeśli możesz mi to napisać jako przykład kodu i wyjaśnić dlaczego właśnie tak, to będę wdzięczny.

Dodam tylko jako wyjaśnienie, ze jest to mój 4 program formularzowy i jestem naprawdę na początku nauki. Staram się ogarniać temat, ale za wiele tego wszystkiego jest na raz...

Zrobiłem to tak

private void pb_btUsuńWybraneFigury_Click(object sender, EventArgs e)
        {
            pb_PlanszaGraficzna.BackColor = pb_tbKolorWypełnienia.BackColor;
            pb_PlanszaGraficzna.Invalidate();
        }
private void pb_PlanszaGraficzna_Paint(object sender, PaintEventArgs e)
        {

            pb_RysujOdNowa();
        }

i w efekcie program zapętla się i w nieskonczoność miga mi obiektem graficznym, a o to chyba chodziło

0

Jeżeli nigdzie więcej nie dałeś Invalidate() lub jakichś zmian w pb_PlanszaGraficzna to nie powinno tak się dziać.
Podaj cały kod, bo z urywków więcej nie da się powiedzieć.

0

oto cała klasa Main w której obsługiwany jest PictureBox

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace Projekt2Bilski43335
{
    public partial class pb_TestowaPlanszaGraficzna : Form
    {
        // wywołąnie zmiennych globalnych
        public Graphics pb_DrawArea;
        
        const int pb_Margines = 10;
        public pb_TestowaPlanszaGraficzna pb_ReferencjaForm1;

        // przypisanie zmiennych do klas zewnętrznych
        public pb_PodstawoweWspółrzędne pb_Form2;

        protected static Color pb_KolorObiektu = Color.Black;
        protected static int pb_WybranaGrubośćLinii;
        protected static DashStyle pb_WybranaLinia;
        protected static int pb_Index = -1;
        pb_CMFigura[] pb_TablicaFigurGeometrycznych = new pb_CMFigura[10];
        protected static int pb_IndexTablicy;
        protected static int pb_MaxIlośćObiektów;
        

        public pb_TestowaPlanszaGraficzna()
        {
            InitializeComponent();

            // przypisanie kontrolki robiczej PictureBox do zmiennej publicznej tpu Graphics
            pb_DrawArea = pb_PlanszaGraficzna.CreateGraphics();

            // wskazanie do czego odwoluje się pb_Referencja
            pb_ReferencjaForm1 = this;
        }




        //---------------------------------------------------------------------------//
        //   Obsługa interface urzytkownika - kontrolki                                //
        //---------------------------------------------------------------------------//


        // obsługa przycisku Rysuj
        private void pb_btDraw_Click(object sender, EventArgs e)
        {

            int pb_WybranaFigura = pb_clbListaObiektówGraficznych.SelectedIndex;

            if (pb_Index < pb_MaxIlośćObiektów)
            {

                switch (pb_clbListaObiektówGraficznych.SelectedIndex)
                {
                    case 0:
                        pb_clbListaObiektówGraficznych.SetItemChecked(0, false);
                        int pb_Promień = 5;
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CPunkt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Promień, pb_tbKolorObiektu.BackColor, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_btDefiniowanieParametrówPołożenia.Enabled = false;
                        pb_lbKolorObiektu.Visible = false;
                        pb_tbKolorObiektu.Visible = false;
                        pb_btDraw.Enabled = false;
                        pb_btUsuńWybraneFigury.Enabled = true;
                        break;
                    case 1:
                        pb_clbListaObiektówGraficznych.SetItemChecked(1, false);
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CLinia(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_WyłączKontrolki1();
                        break;
                    case 2:
                        pb_clbListaObiektówGraficznych.SetItemChecked(2, false);
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CKoło(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_DrawArea, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_Form2.pb_Promień);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_WyłączKontrolki1();
                        break;
                    case 3:
                        pb_clbListaObiektówGraficznych.SetItemChecked(3, false);
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CElipsa(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_DrawArea, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_WyłączKontrolki1();
                        break;
                    case 4:
                        pb_clbListaObiektówGraficznych.SetItemChecked(4, false);
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CProstokąt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_WyłączKontrolki1();
                        break;
                    case 5:
                        pb_clbListaObiektówGraficznych.SetItemChecked(5, false);
                        pb_Index++;
                        pb_NapełnijDataGridView();
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CKwadrat(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_Promień, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_WyłączKontrolki1();
                        break;
                    case 6:
                        pb_clbListaObiektówGraficznych.SetItemChecked(6, false);
                        pb_Index++;
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CTrapez(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_Form2.pb_Promień, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_DrawArea);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_NapełnijDataGridView();
                        pb_WyłączKontrolki1();
                        break;
                    case 7:
                        pb_clbListaObiektówGraficznych.SetItemChecked(7, false);
                        pb_Index++;
                        pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CTrójkąt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_DrawArea, pb_tbKolorObiektu.BackColor, pb_trackbarGLV.Value, pb_WybranaLinia, pb_Form2.pb_Promień);
                        pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                        pb_NapełnijDataGridView();
                        pb_WyłączKontrolki1();
                        break;
                }
            }
            else
            {
                MessageBox.Show("Osignięto maksymalną ilość figur geometrycznych", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
                pb_clbListaObiektówGraficznych.Enabled = false;
                pb_lbIlośćFigur.Visible = false;
                pb_tbIlośćObiektów.Visible = false;
                pb_lbKolorObiektu.Visible = false;
                pb_tbKolorObiektu.Visible = false;
                pb_lbWybórRodzajuLinii.Visible = false;
                pb_cbRodzajLinii.Visible = false;
                pb_lbGrubośćLinii.Visible = false;
                pb_trackbarGLV.Visible = false;
                pb_btDraw.Enabled = false;
                pb_btDefiniowanieParametrówPołożenia.Enabled = false;
                pb_clbListaObiektówGraficznych.SetItemChecked(pb_WybranaFigura, false);
            }
        }



        // obsługa przycisku usunięcia wybranej figury geometrycznej
        private void pb_btUsuńWybraneFigury_Click(object sender, EventArgs e)
        {
            pb_PlanszaGraficzna.BackColor = pb_tbKolorWypełnienia.BackColor;
            pb_PlanszaGraficzna.Invalidate();
            //pb_RysujOdNowa();
        }



        // obsłoga buttona definiowania parametrów położenia figur
        private void pb_btDefiniowanieParametrówPołożenia_Click(object sender, EventArgs e)
        {
            int pb_WybranaFigura = pb_clbListaObiektówGraficznych.SelectedIndex;
            switch (pb_clbListaObiektówGraficznych.SelectedIndex)
            {
                case 0:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne punktu";
                    pb_Form2.pb_lbOpis1.Location = new Point(90, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 1:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne początku linii";
                    pb_Form2.pb_lbOpis1.Location = new Point(70, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpis2.Text = "Współrzędne końca linii";
                    pb_Form2.pb_lbOpis2.Location = new Point(75, 111);
                    pb_Form2.pb_lbOpis2.Visible = true;

                    pb_Form2.pb_lbOpisX1.Text = "Wsp. X1:";
                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Text = "Wsp. Y1:";
                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_lbOpisX2.Text = "Wsp. X2:";
                    pb_Form2.pb_lbOpisX2.Location = new Point(68, 135);
                    pb_Form2.pb_lbOpisX2.Visible = true;
                    pb_Form2.pb_tbX2.Location = new Point(134, 132);
                    pb_Form2.pb_tbX2.Visible = true;

                    pb_Form2.pb_lbOpisY2.Text = "Wsp. Y2:";
                    pb_Form2.pb_lbOpisY2.Location = new Point(68, 161);
                    pb_Form2.pb_lbOpisY2.Visible = true;
                    pb_Form2.pb_tbY2.Location = new Point(134, 158);
                    pb_Form2.pb_tbY2.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 2:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne środka";
                    pb_Form2.pb_lbOpis1.Location = new Point(90, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpis2.Text = "Promień koła";
                    pb_Form2.pb_lbOpis2.Location = new Point(105, 118);
                    pb_Form2.pb_lbOpis2.Visible = true;

                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_tbPromień.Location = new Point(134, 139);
                    pb_Form2.pb_tbPromień.Visible = true;
                    pb_Form2.pb_lbPromień.Location = new Point(70, 142);
                    pb_Form2.pb_lbPromień.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 3:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne górnego lewego narożnika";
                    pb_Form2.pb_lbOpis1.Location = new Point(45, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpis2.Text = "Przesunięcie dla środka obrotu elipsy";
                    pb_Form2.pb_lbOpis2.Location = new Point(50, 111);
                    pb_Form2.pb_lbOpis2.Visible = true;

                    pb_Form2.pb_lbOpisX2.Location = new Point(68, 135);
                    pb_Form2.pb_lbOpisX2.Visible = true;
                    pb_Form2.pb_tbX2.Location = new Point(134, 132);
                    pb_Form2.pb_tbX2.Visible = true;

                    pb_Form2.pb_lbOpisY2.Location = new Point(68, 161);
                    pb_Form2.pb_lbOpisY2.Visible = true;
                    pb_Form2.pb_tbY2.Location = new Point(134, 158);
                    pb_Form2.pb_tbY2.Visible = true;

                    pb_Form2.pb_lbOpisX1.Text = "W osi X:";
                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Text = "W osi Y1:";
                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 4:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne górnego lewego narożnika";
                    pb_Form2.pb_lbOpis1.Location = new Point(45, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpis2.Text = "Szerokośc i wysokość prostokąta";
                    pb_Form2.pb_lbOpis2.Location = new Point(55, 111);
                    pb_Form2.pb_lbOpis2.Visible = true;

                    pb_Form2.pb_lbOpisX1.Text = "Wsp. X1:";
                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Text = "Wsp. Y1:";
                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_lbOpisX2.Text = "Wsp. X2:";
                    pb_Form2.pb_lbOpisX2.Location = new Point(68, 135);
                    pb_Form2.pb_lbOpisX2.Visible = true;
                    pb_Form2.pb_tbX2.Location = new Point(134, 132);
                    pb_Form2.pb_tbX2.Visible = true;

                    pb_Form2.pb_lbOpisY2.Text = "Wsp. Y2:";
                    pb_Form2.pb_lbOpisY2.Location = new Point(68, 161);
                    pb_Form2.pb_lbOpisY2.Visible = true;
                    pb_Form2.pb_tbY2.Location = new Point(134, 158);
                    pb_Form2.pb_tbY2.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 5:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne górnego lewego narożnika";
                    pb_Form2.pb_lbOpis1.Location = new Point(38, 30);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 54);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 51);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 80);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 77);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_lbPromień.Text = "Długość boku :";
                    pb_Form2.pb_lbPromień.Location = new Point(45, 142);
                    pb_Form2.pb_lbPromień.Visible = true;
                    pb_Form2.pb_tbPromień.Location = new Point(134, 139);
                    pb_Form2.pb_tbPromień.Visible = true;
                    
                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 6:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne górnego lewego narożnika";
                    pb_Form2.pb_lbOpis1.Location = new Point(45, 20);
                    pb_Form2.pb_lbOpis1.Visible = true;

                    pb_Form2.pb_lbOpis2.Text = "Pozostałe parametry";
                    pb_Form2.pb_lbOpis2.Location = new Point(85, 101);
                    pb_Form2.pb_lbOpis2.Visible = true;
                    
                    pb_Form2.pb_lbOpisX1.Text = "Wsp. X1:";
                    pb_Form2.pb_lbOpisX1.Location = new Point(68, 44);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(134, 41);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Text = "Wsp. Y2:";
                    pb_Form2.pb_lbOpisY1.Location = new Point(68, 70);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(134, 67);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_lbOpisX2.Text = "Długość górnej podstawy:";
                    pb_Form2.pb_lbOpisX2.Location = new Point(28, 125);
                    pb_Form2.pb_lbOpisX2.Visible = true;
                    pb_Form2.pb_tbX2.Location = new Point(174, 122);
                    pb_Form2.pb_tbX2.Visible = true;

                    pb_Form2.pb_lbOpisY2.Text = "Wysokość:";
                    pb_Form2.pb_lbOpisY2.Location = new Point(68, 176);
                    pb_Form2.pb_lbOpisY2.Visible = true;
                    pb_Form2.pb_tbY2.Location = new Point(134, 175);
                    pb_Form2.pb_tbY2.Visible = true;

                    pb_Form2.pb_lbPromień.Text = "Długośc dolnej podstawy:";
                    pb_Form2.pb_lbPromień.Location = new Point(28, 151);
                    pb_Form2.pb_lbPromień.Visible = true;
                    pb_Form2.pb_tbPromień.Location = new Point(174, 148);
                    pb_Form2.pb_tbPromień.Visible = true;
                    
                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;

                case 7:
                    pb_Form2 = new pb_PodstawoweWspółrzędne(this);

                    pb_Form2.pb_lbOpis1.Text = "Współrzędne trójkąta";
                    pb_Form2.pb_lbOpis1.Location = new Point(85, 20);
                    pb_Form2.pb_lbOpis1.Visible = true;
                    
                    pb_Form2.pb_lbOpisX1.Text = "Wsp. X pierwszego narożnika :";
                    pb_Form2.pb_lbOpisX1.Location = new Point(25, 50);
                    pb_Form2.pb_lbOpisX1.Visible = true;
                    pb_Form2.pb_tbX1.Location = new Point(180, 47);
                    pb_Form2.pb_tbX1.Visible = true;

                    pb_Form2.pb_lbOpisY1.Text = "Wsp. Y pierwszego narożnika :";
                    pb_Form2.pb_lbOpisY1.Location = new Point(25, 76);
                    pb_Form2.pb_lbOpisY1.Visible = true;
                    pb_Form2.pb_tbY1.Location = new Point(180, 73);
                    pb_Form2.pb_tbY1.Visible = true;

                    pb_Form2.pb_lbOpisX2.Text = "Długość podstawy :";
                    pb_Form2.pb_lbOpisX2.Location = new Point(74, 125);
                    pb_Form2.pb_lbOpisX2.Visible = true;
                    pb_Form2.pb_tbX2.Location = new Point(180, 122);
                    pb_Form2.pb_tbX2.Visible = true;

                    pb_Form2.pb_lbPromień.Text = "Wysokość :";
                    pb_Form2.pb_lbPromień.Location = new Point(114, 154);
                    pb_Form2.pb_lbPromień.Visible = true;
                    pb_Form2.pb_tbPromień.Location = new Point(180, 151);
                    pb_Form2.pb_tbPromień.Visible = true;

                    pb_Form2.pb_WybranaFigura = pb_WybranaFigura;
                    pb_Form2.Show();
                    break;
            }
            return;
        }



        // obsługa suwaka definiującego grubość linii
        public void trackBar1_Scroll(object sender, EventArgs e)
        {
            // wywołanie zmienej pomocniczej
            int pb_Przesunięcie;  
            // przypisanie wyboru użytkownika do zmienej pomocniczej
            pb_Przesunięcie = pb_trackbarGLV.Value;     

            // przepisanie wyboru urzytkownika do definicji grubości linii wykresu w kontrolce chart
            if (pb_Przesunięcie == 1)
            {
                pb_WybranaGrubośćLinii = 1;
            }
            else
                if (pb_Przesunięcie == 2)
                {
                    pb_WybranaGrubośćLinii = 2;
                }
                else
                    if (pb_Przesunięcie == 3)
                    {
                        pb_WybranaGrubośćLinii = 3;
                    }
                    else
                        if (pb_Przesunięcie == 4)
                        {
                            pb_WybranaGrubośćLinii = 4;
                        }
                        else
                            if (pb_Przesunięcie == 5)
                            {
                                pb_WybranaGrubośćLinii = 5;
                            }
        }



        // ustawienie wybranego koloru linii
        public void pb_tbKolorLinii_Click(object sender, EventArgs e)
        {
            ColorDialog pb_NowyKolor = new ColorDialog();
            if (pb_NowyKolor.ShowDialog() == DialogResult.OK)
            {
                pb_tbKolorObiektu.BackColor = pb_NowyKolor.Color;
                pb_KolorObiektu = pb_NowyKolor.Color;
            }
        }



        // ustawienie wybranego koloru wypełnienia
        private void pb_tbKolorWypełnienia_Click(object sender, EventArgs e)
        {
            ColorDialog pb_WybranyKolorWypełnienia = new ColorDialog();
            if (pb_WybranyKolorWypełnienia.ShowDialog() == DialogResult.OK)
            {
                // pb_PlanszaGraficzna.BackColor = pb_WybranyKolorWypełnienia.Color;
                pb_tbKolorWypełnienia.BackColor = pb_WybranyKolorWypełnienia.Color;
                //pb_btUsuńWybraneFigury.Text = "ZmieńKolorTła";
                //pb_btUsuńWybraneFigury.Enabled = true;
                return;
            }
            //pb_RysujOdNowa();
        }



        // przywrócenie domyślnego koloru tła
        private void wyczyśćWszystkoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pb_DrawArea.Clear(Color.FromKnownColor(KnownColor.Control));
        }



        // obsługa Menu zamknięcie programu
        private void koniecProgramuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Dziękuję za współudział w testowaniu moich wypocin", "Koniec programu",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Question) == DialogResult.OK)
                Environment.Exit(1);
        }



        // Metoda opisująca użycie przycisku krzyżyk do zamknięcia programu
        private void pb_TestowaPlanszaGraficzna_FormClosing(object sender, FormClosingEventArgs e)
        {
                // wywołanie okienka MesageBox z komunikatem
            if (MessageBox.Show("Czy Napewno chcesz opuścić Program",
                           "Zakończyć Program?",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Environment.Exit(1);
                }
                else
                {
                    e.Cancel = true; // rezygnacja z zamknięcia programu
                }
        }


        
        // obsługa kontrolki wyboru rodzaju linii
        private void pb_cbRodzajLinii_SelectedIndexChanged(object sender, EventArgs e)
        {
            // przypisanie zmienej tymczasowej wartości wybranego indexu kontrolki ComboBox
            int pb_Linia = pb_cbRodzajLinii.SelectedIndex;

            // określenie typu linii w zależności od wyboru użytkownika
            switch (pb_Linia)
            {
                case 0:
                    pb_WybranaLinia = DashStyle.Dash;
                    break;
                case 1:
                    pb_WybranaLinia = DashStyle.DashDot;
                    break;
                case 2:
                    pb_WybranaLinia = DashStyle.DashDotDot;
                    break;
                case 3:
                    pb_WybranaLinia = DashStyle.Dot;
                    break;
                case 4:
                    pb_WybranaLinia = DashStyle.Solid;
                    break;
            }
        }



        // obsługa menu manulalne definiowanie figur
        private void indywidualnyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pb_clbListaObiektówGraficznych.Enabled = false;
            pb_lbIlośćFigur.Visible = true;
            pb_tbIlośćObiektów.Visible = true;
            pb_btLosujIlośćFigur.Visible = false;
        }


        
        // obsługa menu losowe generoeanie figur
        private void losowyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pb_btLosujIlośćFigur.Visible = true;
            pb_tbIlośćObiektów.Visible = true;
            pb_lbIlośćFigur.Visible = false;
            pb_tbKolorWypełnienia.Enabled = false;
        }


        // usówanie i przesówanie wybranej figury 
        private void pb_dgwAktualnaListaObiektów_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // deklaracja zmiennych lokalnych niezbędnych do manipulowania danymi wde kontrolce DGV if TablicyObiektów
            int pb_DoUsunięciaZDGV;
            int pb_ManipulujObiektemWTablicy;

            // jesli kliknięto ikonkę skasuj
            if (e.ColumnIndex == 3 && e.RowIndex >= 0)
            {
                DialogResult result = MessageBox.Show("Skasować wybraną figurę?", "Potwierdzenie", MessageBoxButtons.OKCancel);
                if (result == DialogResult.OK)
                {

                    // pobranie numeru wiersza konrolki 
                    pb_DoUsunięciaZDGV = e.RowIndex;

                    // pobranie zapamiętanej wartości głównego indeksu tworzonych obiektów do zmiennej pośredniej
                    pb_ManipulujObiektemWTablicy = Convert.ToInt32(pb_dgwAktualnaListaObiektów[4, e.RowIndex].Value);

                    // wymazanie wskazanego obiektu przy pomocy metody Wymaż
                    pb_TablicaFigurGeometrycznych[pb_ManipulujObiektemWTablicy].pb_CMWymażFigura();

                    // usunięcie informacji o obiekcie z TalicyObiektów
                    pb_TablicaFigurGeometrycznych = pb_TablicaFigurGeometrycznych.Where((source, index) => index != pb_ManipulujObiektemWTablicy).ToArray();

                    // usunięcie wiersza z tabeli DGV
                    pb_dgwAktualnaListaObiektów.Rows.RemoveAt(e.RowIndex);

                    // ponowne przepisanie wartości indexu po usunięciu wiersza
                    for (int pb_Kasuj = 0; pb_Kasuj < pb_dgwAktualnaListaObiektów.Rows.Count; pb_Kasuj++)
                    {
                        pb_dgwAktualnaListaObiektów.Rows[pb_Kasuj].Cells[4].Value = null;
                        pb_dgwAktualnaListaObiektów.Rows[pb_Kasuj].Cells[4].Value = pb_Kasuj;
                    }
                }
            }



            //jeśli kliknięto ikonke przesuń
            if (e.ColumnIndex == 2 && e.RowIndex >= 0)
            { 
                DialogResult result = MessageBox.Show("Niestety jeszcze nie wymyśliłem jak to zrobić poprawnie!?", "Informacja", MessageBoxButtons.OKCancel);
                if (result == DialogResult.OK)
                {

                }
            }
        }


        // ustawienie wybranego koloru
        private void pb_tbKolorLinii_SystemColorsChanged(object sender, EventArgs e)
        {
            Color pb_NowyKolor;
            pb_NowyKolor = pb_tbKolorObiektu.BackColor;
            pb_KolorObiektu = pb_NowyKolor;
        }


        // obsługa reakcji na zmiane wartości text w kontrolce ilosc obiektów
        private void pb_tbIlośćObiektów_TextChanged(object sender, EventArgs e)
        {
            int pb_IlośćObiektów = Convert.ToInt32(pb_tbIlośćObiektów.Text);
            pb_MaxIlośćObiektów = pb_IlośćObiektów;
            pb_clbListaObiektówGraficznych.Enabled = true;
        }







        //---------------------------------------------------------------------------//
        //   Niezbędne metody publiczne                                                //
        //---------------------------------------------------------------------------//




        // metoda ponownie rysująca całą zawartosc tablicy obiektów
        public void pb_RysujOdNowa()
        {
            int pb_długośćTablicy = pb_dgwAktualnaListaObiektów.Rows.Count;
            for (int pb_i = 0; pb_i < pb_długośćTablicy - 1; pb_i++)
            {
                pb_TablicaFigurGeometrycznych[pb_i].pb_CMRysujFigura();
            }
        }



        // metoda wpisująca dane do tabeli DataGridView
        public void pb_NapełnijDataGridView()
        {
            pb_dgwAktualnaListaObiektów.Rows.Add();

            switch (pb_clbListaObiektówGraficznych.SelectedIndex)
            {
                case 0:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Punkt";
                    break;
                case 1:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Linia";
                    break;
                case 2:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Koło";
                    break;
                case 3:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Elipsa";
                    break;
                case 4:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Prostokąt";
                    break;
                case 5:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Kwadrat";
                    break;
                case 6:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Trapez";
                    break;
                case 7:
                    pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Trójkąt";
                    break;
            }

            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_tbKolorObiektu.BackColor;
            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
        }



        // metoda porządkowa - wyłącza dostęp do powtarzalnego zestawu kontrolek
        public void pb_WyłączKontrolki1()
        {
            pb_btDefiniowanieParametrówPołożenia.Enabled = false;
            pb_lbKolorObiektu.Visible = false;
            pb_tbKolorObiektu.Visible = false;
            pb_lbWybórRodzajuLinii.Visible = false;
            pb_cbRodzajLinii.Visible = false;
            pb_lbGrubośćLinii.Visible = false;
            pb_trackbarGLV.Visible = false;
            pb_btDraw.Enabled = false;
            pb_btUsuńWybraneFigury.Enabled = true;
        }


        // metoda porządkowa - wyświetla  lub uruchamia powtarzalny zestaw kontrolek
        public void pb_UruchomKontrolki1()
        {
            pb_btDefiniowanieParametrówPołożenia.Enabled = true;
            pb_lbKolorObiektu.Visible = true;
            pb_tbKolorObiektu.Visible = true;
            pb_lbWybórRodzajuLinii.Visible = true;
            pb_cbRodzajLinii.Visible = true;
            pb_lbGrubośćLinii.Visible = true;
            pb_trackbarGLV.Visible = true;
        }



        // metoda przekazująca wartość metody Enabled kontrolki Draw do formularza PobieranieDanych
        public bool pb_btDrawEnable
        {
            get { return pb_btDraw.Enabled; }
            set { pb_btDraw.Enabled = value; }
        }


        // metoda pobierająca informacje o tym która figóra została wybrana
        public void pb_PobieżNumerFigury(out int pb_WybranaFigura)
        {
            pb_WybranaFigura = pb_clbListaObiektówGraficznych.SelectedIndex;
        }


        // metoda obsługi obiektu CheckedListBox
        private void pb_clbListaObiektówGraficznych_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            // deklaracja zmiennej lokalnej
            int pb_ZaznaczonaFigura;

            // przypisanie zmiennej do indexu zaznaczonej figury
            pb_ZaznaczonaFigura = pb_clbListaObiektówGraficznych.SelectedIndex;

            // obsługa indexow wyłączająca inne zaznaczone figury po zaznaczeniu kolejnej
            if (pb_ZaznaczonaFigura == 0)
            {
                {
                    for (int i = 0; i < pb_clbListaObiektówGraficznych.Items.Count; ++i)
                        if (i != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(i, false);
                }
                pb_btDefiniowanieParametrówPołożenia.Enabled = true;

                
                pb_lbKolorObiektu.Visible = true;
                pb_tbKolorObiektu.Visible = true;
            }
            else
                if (pb_ZaznaczonaFigura == 1)
                {
                    {
                        for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                            if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                    }
                    pb_UruchomKontrolki1();

                }
                else
                    if (pb_ZaznaczonaFigura == 2)
                    {
                        {
                            for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                        }
                        pb_UruchomKontrolki1();
                    }
                    else
                        if (pb_ZaznaczonaFigura == 3)
                        {
                            {
                                for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                    if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                            }
                            pb_UruchomKontrolki1();
                        }
                        else
                            if (pb_ZaznaczonaFigura == 4)
                            {
                                {
                                    for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                        if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                                }
                                pb_UruchomKontrolki1();
                            }
                            else
                                if (pb_ZaznaczonaFigura == 5)
                                {
                                    {
                                        for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                            if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                                    }
                                    pb_UruchomKontrolki1();
                                }
                                else
                                    if (pb_ZaznaczonaFigura == 6)
                                    {
                                        {
                                            for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                                if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                                        }
                                        pb_UruchomKontrolki1();
                                    }
                                    else
                                        if (pb_ZaznaczonaFigura == 7)
                                        {
                                            {
                                                for (int ix = 0; ix < pb_clbListaObiektówGraficznych.Items.Count; ++ix)
                                                    if (ix != e.Index) pb_clbListaObiektówGraficznych.SetItemChecked(ix, false);
                                            }
                                            pb_UruchomKontrolki1();
                                        }
                                       
        }





        //---------------------------------------------------------------------------//
        //   Zabezpieczenia przed głupota urzytkownika - tak jest prościej             //
        //---------------------------------------------------------------------------//

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbX1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbY1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbX2_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbY2_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbIloscPowtorzen_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbPrzesunięcieWPoziomie_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void tbPrzesuniecieWPionie_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ogranicznie wprowadzania znaków do samych cyfr i Backspace
        private void pb_tbGrubośćLinii_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        // ograniczenie wprowadzania znaków do sammych cyfr i Backspace 
        private void pb_tbWylosowanoXObiektów_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)8;
        }

        private void pb_TestowaPlanszaGraficzna_Load(object sender, EventArgs e)
        {
            for (int pb_usuń = 0; pb_usuń < pb_dgwAktualnaListaObiektów.Rows.Count; pb_usuń++)
            {
                if (string.Equals(pb_dgwAktualnaListaObiektów[0, pb_usuń].Value as string, ""))
                {
                    pb_dgwAktualnaListaObiektów.Rows.RemoveAt(pb_usuń);
                    pb_usuń--;
                }
            }
        }

        private void pb_PlanszaGraficzna_Paint(object sender, PaintEventArgs e)
        {
            pb_RysujOdNowa();
        }

       // wylosowanie ilośc figur (długości tablicy)
        private void pb_btLosujIlośćFigur_Click(object sender, EventArgs e)
        {
            pb_lbListaObiektów.Visible = false;
            pb_clbListaObiektówGraficznych.Visible = false;
            pb_Form2 = new pb_PodstawoweWspółrzędne();
            int pb_Xr1 = 0, pb_Yr1 = 0, pb_Xr2 = 0, pb_Yr2 = 0;
            Color pb_WybranyKolor;
            int pb_GrubośćLinii;
            DashStyle pb_RodzajLinii = DashStyle.Solid;
            int pb_Promień = 1;
            int pb_WylosowanaLiczbaFigur;




            Random pb_LiczbaLosowa = new Random();

            int pb_XMaxRozmiarPlanszyGraf = this.pb_PlanszaGraficzna.Width;
            int pb_YMaxRozmiarPlanszyGraf = this.pb_PlanszaGraficzna.Height;

            pb_WylosowanaLiczbaFigur = pb_LiczbaLosowa.Next(1, 10);
            pb_tbIlośćObiektów.Text = Convert.ToString(pb_WylosowanaLiczbaFigur);
            pb_btLosujIlośćFigur.Text = "Wylosowano :";
            pb_btLosujIlośćFigur.Enabled = false;
            pb_clbListaObiektówGraficznych.Enabled = true;



            for (int i = 0; i < pb_TablicaFigurGeometrycznych.Length; i++)
            {
                pb_Xr1 = pb_LiczbaLosowa.Next(pb_Margines, pb_XMaxRozmiarPlanszyGraf - pb_Margines);
                pb_Yr1 = pb_LiczbaLosowa.Next(pb_Margines, pb_YMaxRozmiarPlanszyGraf - pb_Margines);
                pb_Xr2 = pb_LiczbaLosowa.Next(pb_Margines, pb_XMaxRozmiarPlanszyGraf - pb_Margines);
                pb_Yr2 = pb_LiczbaLosowa.Next(pb_Margines, pb_YMaxRozmiarPlanszyGraf - pb_Margines);

                pb_WybranyKolor = Color.FromArgb(pb_LiczbaLosowa.Next(0, 256),
                                                 pb_LiczbaLosowa.Next(0, 256),
                                                 pb_LiczbaLosowa.Next(0, 256));

                pb_GrubośćLinii = pb_LiczbaLosowa.Next(1, 5);
                pb_Promień = pb_LiczbaLosowa.Next(5, pb_YMaxRozmiarPlanszyGraf / 4);

                switch (pb_LiczbaLosowa.Next(1, 6))
                {
                    case 1:
                        pb_RodzajLinii = DashStyle.Dash;
                        break;
                    case 2:
                        pb_RodzajLinii = DashStyle.DashDot;
                        break;
                    case 3:
                        pb_RodzajLinii = DashStyle.DashDotDot;
                        break;
                    case 4:
                        pb_RodzajLinii = DashStyle.Dot;
                        break;
                    case 5:
                        pb_RodzajLinii = DashStyle.Solid;
                        break;
                }



                if (pb_Index < pb_MaxIlośćObiektów - 1)
                {
                    pb_Form2.pb_x1 = pb_Xr1;
                    pb_Form2.pb_x2 = pb_Xr2;
                    pb_Form2.pb_y1 = pb_Yr1;
                    pb_Form2.pb_y2 = pb_Yr2;
                    pb_Form2.pb_Promień = pb_Promień;
                    pb_KolorObiektu = pb_WybranyKolor;
                    pb_WybranaGrubośćLinii = pb_GrubośćLinii;
                    pb_WybranaLinia = pb_RodzajLinii;
                    pb_WylosowanaLiczbaFigur = pb_MaxIlośćObiektów;

                    switch (pb_LiczbaLosowa.Next(1, 8))
                    {
                        case 0:
                            pb_clbListaObiektówGraficznych.SetItemChecked(0, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Punkt";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CPunkt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_Promień, pb_KolorObiektu, pb_DrawArea);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            break;
                        case 1:
                            pb_clbListaObiektówGraficznych.SetItemChecked(1, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Linia";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CLinia(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_DrawArea);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 2:
                            pb_clbListaObiektówGraficznych.SetItemChecked(2, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Koło";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CKoło(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_DrawArea, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_Form2.pb_Promień);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 3:
                            pb_clbListaObiektówGraficznych.SetItemChecked(3, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Elipsa";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CElipsa(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_DrawArea, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 4:
                            pb_clbListaObiektówGraficznych.SetItemChecked(4, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Prostokąt";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CProstokąt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_DrawArea);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 5:
                            pb_clbListaObiektówGraficznych.SetItemChecked(5, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Kwadrat";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CKwadrat(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_Promień, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_DrawArea);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 6:
                            pb_clbListaObiektówGraficznych.SetItemChecked(6, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "Trapez";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CTrapez(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_Form2.pb_y2, pb_Form2.pb_Promień, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_DrawArea);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                        case 7:
                            pb_clbListaObiektówGraficznych.SetItemChecked(7, true);
                            pb_Index++;
                            pb_dgwAktualnaListaObiektów.Rows.Add();
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[0].Value = "trujkąt";
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[1].Style.BackColor = pb_KolorObiektu;
                            pb_dgwAktualnaListaObiektów.Rows[pb_Index].Cells[4].Value = pb_Index;
                            pb_TablicaFigurGeometrycznych[pb_Index] = new pb_CTrójkąt(pb_Form2.pb_x1, pb_Form2.pb_y1, pb_Form2.pb_x2, pb_DrawArea, pb_KolorObiektu, pb_WybranaGrubośćLinii, pb_WybranaLinia, pb_Form2.pb_Promień);
                            pb_TablicaFigurGeometrycznych[pb_Index].pb_CMRysujFigura();
                            //pb_WyłączKontrolki1();
                            break;
                    }
                    //return;
                }
            }
        }
    }
}
0

poradziłem sobie inaczej

zamiast Invalidate(); zastosowałem refresh();

private void pb_btZastosuj_Click(object sender, EventArgs e)
        {
            pb_PlanszaGraficzna.BackColor = pb_tbKolorWypełnienia.BackColor;
            pb_PlanszaGraficzna.Refresh();
            pb_RysujOdNowa();
        }

i działa bezbłednie

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