• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Klasa Graphics

Object Storage Arubacloud
0 głosów
715 wizyt
pytanie zadane 20 października 2016 w C# przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Witam mam za zadnie stworzyć program który będzie rysował figury na WindowsForm. Projekt ma być w jezyku c# i każda figura ma mieć własną klasę. Niestety ale poniższy kod się nie kompiluje gdy zadanie robię na klasach (gdy robiłem bez nich nie było problemu) 

using System;
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;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Kwadrat p = new Kwadrat();
            p.create();
        }
    }
    class Kwadrat
    {
        Graphics g;
        Rectangle r;
        Pen p;
        public void create()
        {
            g = CreateGraphics();
            p = new Pen(Brushes.DarkGreen);
            r = new Rectangle(40, 40, 40, 40);
            g.DrawEllipse(p, r);
        }
    }
}

 

 

Oto kod a błąd jest w tej lini 

 g = CreateGraphics();

a jego tresc to 

CS0103  C# The name 'CreateGraphics' does not exist in the current context

 

Jak się z tym uporać ?

komentarz 22 października 2016 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Witam nie chce zakładać nowego tamatu. 

Zrobiłem coś co powinno rysować wybrana figurę niestety program nie działa.

W kodzie są takie obiekty jak:

textBox1 - wpisywanie dlugosci a lub r

textBox2 -wpisywanie dl b (tam gdzie potrzebne (kwadrat trojkat)

textBox3- wspolrzena x

textBox4- wsp y

ComboBox -> Selekcja figury - index 0 kwadrat, 1 prostokat,2 trojkat,3 koło

oto kod (program kompiluje sie poprawnie ale nic nie rysuje :(

using System;
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;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }                    
        private void Form1_Load(object sender, EventArgs e)
        {
            Wyczysc_button.Visible = false;
        }
        private void formula_wyczysc()
        {
            Wyczysc_button.Visible = true;
            Rysuj_button.Visible = false;
            textBox1.Enabled = false;
            textBox2.Enabled = false;
            textBox3.Enabled = false;
            textBox4.Enabled = false;
            comboBox1.Enabled = false;
            comboBox2.Enabled = false;
       }
        //zdarzenie dla przycisku rysuj
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox1.Text != "" && textBox3.Text != "" && textBox4.Text != "")
                {
                    //kwadrat
                    if (comboBox1.SelectedIndex == 0)
                    {
                        int wsp_x, wsp_y, dl_a;
                        dl_a = int.Parse(textBox1.Text);
                        wsp_x = int.Parse(textBox3.Text);
                        wsp_y = int.Parse(textBox4.Text);
                        Kwadrat square = new Kwadrat(CreateGraphics());
                        square.create(wsp_x, wsp_y, dl_a);
                        formula_wyczysc();
                    }
                    //prostokat
                    else if (comboBox1.SelectedIndex == 1)
                    {
                        int wsp_x, wsp_y, dl_a, dl_b;
                        dl_a = int.Parse(textBox1.Text);
                        dl_b = int.Parse(textBox2.Text);
                        wsp_x = int.Parse(textBox3.Text);
                        wsp_y = int.Parse(textBox4.Text);
                        Prostokat rectangle = new Prostokat(CreateGraphics());
                        rectangle.create(wsp_x, wsp_y, dl_a, dl_b);
                        formula_wyczysc();
                    }
                    //trojkat
                    else if (comboBox1.SelectedIndex == 2)
                    {
                        int wsp_x, wsp_y, dl_a, dl_h;
                        dl_a = int.Parse(textBox1.Text);
                        dl_h = int.Parse(textBox2.Text);
                        wsp_x = int.Parse(textBox3.Text);
                        wsp_y = int.Parse(textBox4.Text);
                        Trojkat triangle = new Trojkat(CreateGraphics());
                        triangle.create(wsp_x,wsp_y,dl_a,dl_h);
                        formula_wyczysc();
                    }
                    //kolo
                    else if (comboBox1.SelectedIndex == 3)
                    {
                        int wsp_x, wsp_y, dl_r;
                        dl_r = int.Parse(textBox1.Text);
                        wsp_x = int.Parse(textBox3.Text);
                        wsp_y = int.Parse(textBox4.Text);
                        Kolo circle = new Kolo(CreateGraphics());
                        circle.create(wsp_x, wsp_y, dl_r);
                        formula_wyczysc();
                    }
                }
            }
            catch
            {
                MessageBox.Show("Złe dane! Spróbój ponownie:)","Error", MessageBoxButtons.OK);
            }
        }

        private void Wyczysc_button_Click(object sender, EventArgs e)
        {
            
        }
        //selekcja figur
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //kwadrat
         if(comboBox1.SelectedIndex==0)
            {
                textBox1.Visible = true;
                textBox1.Text = "bok a";
                textBox2.Visible = false;
                textBox3.Visible = true;
                textBox3.Text = "x";
                textBox4.Visible = true;
                textBox4.Text = "y";
            }
            //prostokat
            else if (comboBox1.SelectedIndex == 1)
            {
                textBox1.Visible = true;
                textBox1.Text = "bok a";
                textBox2.Visible = true;
                textBox2.Text = "bok b";
                textBox3.Visible = true;
                textBox3.Text = "x";
                textBox4.Visible = true;
                textBox4.Text = "y";
            }
            //trojkat
            else if (comboBox1.SelectedIndex == 2)
            {
                textBox1.Visible = true;
                textBox1.Text = "bok a";
                textBox2.Visible = true;
                textBox2.Text = "wysokosc h";
                textBox3.Visible = true;
                textBox3.Text = "x";
                textBox4.Visible = true;
                textBox4.Text = "y";
            }
            //kolo
            else if (comboBox1.SelectedIndex == 3)
            {
                textBox1.Visible = true;
                textBox1.Text = "promień r";
                textBox2.Visible = false;
                textBox3.Visible = true;
                textBox3.Text = "x";
                textBox4.Visible = true;
                textBox4.Text = "y";
            }

        }
    }
    class Kwadrat
    {
        public Kwadrat(Graphics graph)
        {
            g = graph;
        }

        Graphics g;
        Rectangle r;
        Pen p;
        public void create(int KW_wsp_x, int KW_wsp_y, int KW_dl_a)
        {
            p = new Pen(Brushes.DarkGreen);
            r = new Rectangle(KW_wsp_x, KW_wsp_y, KW_dl_a, KW_dl_a);
            g.DrawRectangle(p, r);
        }
    }
    class Trojkat
    {
        public Trojkat(Graphics graph)
        {
            g = graph;
        }
        Graphics g;
        public void create(int x, int y, int a, int h)
        {
            Pen blackPen = new Pen(Color.Black, 3);

            Point point1 = new Point(x, y);
            Point point2 = new Point(x, (y+h));
            Point point3 = new Point((x+h), y);
            Point[] curvePoints = { point1, point2, point3 };
                         

            // Draw polygon to screen.
            g.DrawPolygon(blackPen, curvePoints);
        }
    }
    class Prostokat
    {
        public Prostokat(Graphics graph)
        {
            g = graph;
        }
        Graphics g;
        Rectangle r;
        Pen p;

        public void create(int KW_wsp_x, int KW_wsp_y, int KW_dl_a, int KW_dl_b)
        {
            p = new Pen(Brushes.DarkGreen);
            r = new Rectangle(KW_wsp_x, KW_wsp_y, KW_dl_a, KW_dl_b);
            g.DrawRectangle(p, r);
        }
    }
    class Kolo
    {
        public Kolo(Graphics graph)
        {
            g = graph;
        }
        Graphics g;
        Pen p;

        public void create(int KW_wsp_x, int KW_wsp_y, int KW_dl_r)
        {
            p = new Pen(Brushes.Green);
            g.DrawEllipse(p, KW_dl_r, KW_dl_r,KW_wsp_x, KW_wsp_y);
        }
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 20 października 2016 przez Dorion300 Szeryf (90,250 p.)
wybrane 20 października 2016 przez Paweł Nąckiewicz
 
Najlepsza
Ponieważ metoda CreateGraphics() nie istnieje w tej klasie.

Ta metoda działała ci w klasie Form1 gdyż dziedziczy ona z klasy Form która zawiera metodę "CreateGraphics()"
komentarz 20 października 2016 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
public partial class Kwadrat : Form

 

użyłem takiej klasy. Bledu nie wywala ale też nic nie rysuje...

Jak to szybko naprawić?
komentarz 20 października 2016 przez Dorion300 Szeryf (90,250 p.)
Próbujesz teraz stworzyć osobne okienko. (Okienko o "nazwie" Kwadrat)
A podejrzewam że chcesz narysować element na obecnym oknie.
Wystarczy wywołać "CreateGraphics()" w Form1 a następnie przekazać obiekt graphics do obiektu Kwadrat

Wyobraź sobie że płótnem jest Bitmap'a (Jest taka klasa w C#) a stojakiem i narzędziami to obiekt Graphics.
CreateGraphics() tworzy takowy "stojak" dla obiektu w którym go wywołujemy (Form1) i za pomocą tego stojaka malujesz obraz (czyli przestrzeń w Form1)
komentarz 20 października 2016 przez Dorion300 Szeryf (90,250 p.)

Proszę, o to kod:

using System;
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;

namespace WindowsFormsApplicationTest {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
        }
        private void button1_Click(object sender, EventArgs e) {
            Kwadrat p = new Kwadrat(CreateGraphics());
            p.create();
        }
    }
    class Kwadrat {
        public Kwadrat(Graphics graph) {
            g = graph;
        }

        Graphics g;
        Rectangle r;
        Pen p;
        public void create() {
            p = new Pen(Brushes.DarkGreen);
            r = new Rectangle(40, 40, 40, 40);
            g.DrawEllipse(p, r);
        }
    }
}

Mam nadzieję że o to ci chodzi.

komentarz 20 października 2016 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
O super wlasnie o to chodziło. Wielkie dzieki :)

Podobne pytania

0 głosów
2 odpowiedzi 2,062 wizyt
0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 21 października 2019 w C# przez JakSky Stary wyjadacz (14,770 p.)
0 głosów
1 odpowiedź 684 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...