[C#] dostęp do formy z obcej klasy

0

Witam.

Projektując prostą aplikację natknąłem się na następujący problem.

Mam formę na której jest przycisk wywołujący metodę pewnej klasy. Klasa jest w tej samej przestrzeni nazw ale w innym pliku. Klasa posiada metodę np rysuj typu void która powinna coś na rysować bezpośrednio na formularzu. Jakoś zupełnie nie mogę się do tego dobrać. Otóż wygląda na to iż ten formularz jest niedostępny z poziomu tej klasy. Jak się dobrać do formy z poziomu metody znajdującej się w klasie?

Z góry dzięki.

0

Najlepiej przekaż metodzie rysującej obiekt Graphic pobrany z formy funkcją CreateGraphics. Jak kontrolka skończy rysować po tym obiekcie zwolnij go metodą Dispose:

//button click
Graphic g = CreateGraphics();
kontrolka_rysująca.rysuj(g);
g.Dispose();
0

dzięki za info ale wciąż jest jakieś nie halo

//form1
        private void button3_Click(object sender, EventArgs e)
        {
            wall scianka = new wall();
            scianka.rysuj(panel1);
        }

// plik wall.cs
// klasa wall

    class wall : Form1
    {
        public void rysuj(object sender)
        {
            int i, x, y;
            PictureBox[] pictur = new PictureBox[10];;
            
            x = 50;
            y = 10;
            for (i = 0; i < 10; i++)
            {
                if (i > 5) { y += 10; x = 50; }
                pictur[i] = new PictureBox();
                pictur[i].Height = 8;
                pictur[i].Width = 10;
                pictur[i].SizeMode = PictureBoxSizeMode.AutoSize;
                pictur[i].Image = Properties.Resources.paletka_poziom;
                pictur[i].Left = x;
                pictur[i].Top = y;
                x = x + 32;
                this.Controls.Add(pictur[i]);
            }
        }
    }

po wciśnięciu przycisku nic sie nie dzieje. Kod jest przykładowy ale efekt jaki chcę uzyskać to utworzenie na form1 obrazków generowanych z klasy wall metodą rysuj.

co jeszcze robię nie tak?

pozdrawiam
NK

0
//form1
        private void button1_Click(object sender, EventArgs e)
        {
            Wall w = new Wall();
            w.rysuj(this);
        }

// plik wall.cs
// klasa wall

    class Wall
    {
        public void rysuj(Form form)
        {
            int i, x, y;
            PictureBox[] pictur = new PictureBox[10]; ;

            x = 50;
            y = 10;

            for (i = 0; i < 10; i++)
            {
                if (i > 5) { y += 10; x = 50; }

                pictur[i] = new PictureBox();
                pictur[i].Height = 8;
                pictur[i].Width = 10;
                pictur[i].SizeMode = PictureBoxSizeMode.AutoSize;
                pictur[i].Image = Properties.Resources._7064;
                pictur[i].Left = x;
                pictur[i].Top = y;
                x = x + 32;

                form.Controls.Add(pictur[i]);
            }
        }
    }

0

Dzięki ponownie Mendoza :-)

Pierwsze koty za płoty - wynik znajduje się tutaj http://www.goobi.pl/c

pozdrawiam
NK

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