C# programok ismertetése érdeklődőknek kezdőktől haladókig

C# MŰHELY

C# MŰHELY

GRAFIKA: Két kör helyzetének vizsgálata

2020. október 07. - Benkő Tiborné

Írjuk programot, amely két kör helyzetét megvizsgálja, kijelzi az állapotukat (metszik egymást, vagy érintik illetve nem érintik egymást) és grafikusan is ábrázolja.

A feladat megoldása

namespace Kör2
{
    public struct t
    {
          public static int xx1, yy1, rr1, xx2, yy2, rr2;
    }

    public partial class Form1 : Form
    {
         public Form1()
         {
              InitializeComponent();
         }

        static double Távolság(double x1, double y1,
                               double x2, double y2)
        {
              return (Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) *
                                (y2 - y1)));
        }

        static int Mettszés(double x1, double y1, double r1,
                            double x2, double y2, double r2)
        {
            double d;
            d = Távolság(x1, y1, x2, y2);
            if (d < Math.Abs(r1 - r2)) return 1;
            if (d > (r1 + r2)) return 1;
            else if (d < (r1 + r2)) return 2;
            else return 3;
        }

        static void Mettszéspont(int metsz,
                                 double x1, double y1, double r1,
                                 double x2, double y2, double r2,
                                 out double x1m, out double y1m,
                                 out double x2m, out double y2m,
                                 out double mx, out double my)
       {
            double fi, z, tangfi, cosalfa;
            x1m = 0; y1m = 0; x2m = 0; y2m = 0;
            double c, alfa;
            mx = 0; my = 0;
            if (x1 > x2)
            {
                c = x1; x1 = x2; x2 = c;
                c = y1; y1 = y2; y2 = c;
                c = r1; r1 = r2; r2 = c;
            }

            switch (metsz)
            {
                case 1: break;
                case 2:
                    tangfi = (y2 - y1) / (x2 - x1);
                    fi = Math.Atan(tangfi);
                    z = Távolság(x1, y1, x2, y2);
                    cosalfa = (r1 * r1 + z * z - r2 * r2) /
                              (2 * r1 * z);
                    alfa = Math.Atan(Math.Sqrt(1 - cosalfa * cosalfa)
                           /
Math.Abs(cosalfa));
                   x1m = x1 + r1 * Math.Cos(alfa + fi);
                   y1m = y1 + r1 * Math.Sin(alfa + fi);
                   x2m = x1 + r1 * Math.Cos(alfa - fi);
                   y2m = y1 - r1 * Math.Sin(alfa - fi);
                   break;
              case 3:
                    alfa = Math.Atan((y2 - y1) / (x2 - x1));
                    my = y1 + r1 * Math.Sin(alfa);
                    mx = x1 + r1 * Math.Cos(alfa);
                    break;
             }
        }

        private void Vizsgálat_Click(object sender, EventArgs e)
        {
            double x1, y1, r1, x2, y2, r2;
            double x1m, y1m, x2m, y2m, mx = 0, my = 0;
            int metszés0;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "" && textBox4.Text != "" &&
                textBox5.Text != "" && textBox6.Text != "")
            {
                x1 = Double.Parse(textBox1.Text);
                y1 = Double.Parse(textBox2.Text);
                r1 = Double.Parse(textBox3.Text);
                x2 = Double.Parse(textBox4.Text);
                y2 = Double.Parse(textBox5.Text);
                r2 = Double.Parse(textBox6.Text);
                t.xx1 = (int)x1;
                t.yy1 = (int)y1;
                t.rr1 = (int)r1;
                t.xx2 = (int)x2;
                t.yy2 = (int)y2;
                t.rr2 = (int)r2;
                metszés0 = Mettszés(x1, y1, r1, x2, y2, r2);

                switch (metszés0)
                {
                     case 1:
                        textBox13.Text =
                                 "A köröknek nincs közös pontjuk.";
                        break;
                    case 2:
                        textBox13.Text = "A körök metszik egymást.";
                        break;
                    case 3:
                        textBox13.Text = "A körök érintik egymást.";
                        break;
                }

                Mettszéspont(metszés0, x1, y1, r1, x2, y2, r2,
                             out x1m,
out y1m, out x2m, out y2m,
                             out mx, out my);
                if (metszés0 == 2)
                {
                    textBox7.Text = x1m.ToString();
                    textBox8.Text = y1m.ToString();
                    textBox9.Text = x2m.ToString();
                    textBox10.Text = y2m.ToString();
                }
                if (metszés0 == 3)
                {
                    textBox11.Text = mx.ToString();
                    textBox12.Text = my.ToString();
                }
                Rajzolás.Enabled = true;
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = ""
; textBox10.Text = "";
            textBox11.Text = ""; textBox12.Text = "";
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = ""
textBox10.Text = "";
            textBox11.Text = ""; textBox12.Text = "";
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = ""
textBox10.Text = "";
            textBox11.Text = ""; textBox12.Text = "";
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = ""
textBox10.Text = "";
            textBox11.Text =
""; textBox12.Text = ""; 
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }   
 
        private void textBox5_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = ""
textBox10.Text = "";
            textBox11.Text = ""; textBox12.Text = "";
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {
            textBox7.Text = ""; textBox8.Text = "";
            textBox9.Text = "";
 textBox10.Text = "";
            textBox11.Text = ""; textBox12.Text = "";
            textBox13.Text = ""; Rajzolás.Enabled = false;
        }

        private void Rajzolás_Click(object sender, EventArgs e)
        {
            new Form2().ShowDialog();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Rajzolás.Enabled = false;
        }
    }
}

namespace Kör2
{
     public partial class Form2 : Form
     {
        public Form2()
        {
             InitializeComponent();
        }

        private void Rajzol_Click(object sender, EventArgs e)
        {  
            int ymax = 250;
            int x1, x2, y1, y2;
            y1 = t.yy1; y2 = t.yy2;
            x1 = t.xx1 - t.rr1; y1 = ymax - y1 -t.rr1;
            x2 = t.xx2 - t.rr2; y2 = ymax - y2 - t.rr2;
            Pen p1 = new Pen(Color.Blue, 2);
            Pen p2 = new Pen(Color.Red, 2);
            Graphics gr = CreateGraphics();
            Rectangle t1 = new Rectangle(new Point(x1, y1),
                           new Size(2 * t.rr1, 2 * t.rr1));
            Rectangle t2 = new Rectangle(new Point(x2, y2),
                           new Size(2 * t.rr2, 2 * t.rr2));
            gr.DrawEllipse(p1, t1);
            gr.DrawEllipse(p2, t2);
            gr.Flush();
        }

        private void Bezár_Click(object sender, EventArgs e)
        {
              Close();
        }
    }
}

A program futási eredményei:

 

GRAFIKA: Szimmetrikus forgattyú szimulációja

Írjunk szimulációs programot szimmetrikus forgattyú elrendezésű dugattyús belsőégésű motor működésére..

A feladat megoldása

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    

        private void button1_Click(object sender, EventArgs e)
        {
            int k;
            if (textBox1.Text != "")
            {
                k = Int32.Parse(textBox1.Text);
                Dugattyu d1 =
                       new Dugattyu(200, 10, 150, 250, 10,
                                                  210, 70, k);
                d1.Mozog(this);
            }
        }
    }

        class Henger
        {
            protected int x1h, y1h;
            protected int a1, b1;
            public Henger(int x, int y, int a, int b)
            {
                x1h = x;
                y1h = y;
                a1 = a;
                b1 = b;
            }  

            public virtual void Rajzol(Form1 form)
            {
                Graphics g = form.CreateGraphics();
                Pen p = new Pen(Color.Black, 1);
                g.DrawLine(p, new Point(x1h, y1h),
                              new Point(x1h + a1, y1h));
                g.DrawLine(p, new Point(x1h, y1h),
                              new Point(x1h, y1h + b1 + 17));
                g.DrawLine(p, new Point(x1h + a1, y1h),
                              new Point(x1h + a1, y1h + b1 + 17));
            }
        }

        class Dugattyu : Henger
        {
            private int h1, sz, m;
            private int kesleltet;
            private int x1d, y1d, x2d, y2d; // rúd
            private int xt1, yt1, xt2, yt2; // tengely
            private int xr1, yr1, r1, Rt;
            private int xR2, yR2;
            private int xv, yv;
            private int x1dv, y1dv, x2dv, y2dv;
            private int xr1v, yr1v;
            private int xt1v, yt1v, xt2v, yt2v;
            public Dugattyu(int x, int y, int a, int b, int r, int h,
                            int R2, int kesl) :

            base(x, y, a, b)
            {
                xv = 0;
                yv = 0;
                h1 = h;
                r1 = r;
                Rt = R2;
                kesleltet = kesl

                x1d = x1h + 3;
                y1d = y1h + 3;
                x2d = x1d + a1 - 6;
                y2d = y1d;

                sz = x2d - x1d;
                m = b1 / 2;

                xr1 = x1d + sz / 2;
                yr1 = y1d + m / 2;

                xt1 = xr1; yt1 = yr1;
                xt2 = xt1; yt2 = yr1 + h1;

                xR2 = xr1;
                yR2 = yr1 + h1 + Rt;
            }

            public void Számol()
            {
                x1dv = x1d;
                y1dv = y1d + yv;
                x2dv = x2d;
                y2dv = y1dv;
                xr1v = xr1;
                yr1v = yr1 + yv;

                xt1v = xr1v; yt1v = yr1v;
                xt2v = xt2 + xv; yt2v = yt2 + yv;
            }

            public override void Rajzol(Form1 form)
            {
                Graphics g = form.CreateGraphics();
                g.Clear(Color.White);
                base.Rajzol(form);
                Pen p = new Pen(Color.Red, 1);
                g.DrawLine(p, new Point(x1dv, y1dv),
                              new Point(x2dv, y2dv));
                g.DrawLine(p, new Point(x1dv, y1dv),
                              new Point(x1dv, y2dv + m));
                g.DrawLine(p, new Point(x2dv, y2dv),
                              new Point(x2dv, y2dv + m));
                Rectangle t = new Rectangle(
                                  new Point(xr1v - r1, yr1v - r1),
                                  new Size(2 * r1, 2 * r1));
                g.DrawEllipse(p, t);
                g.DrawLine(p, new Point(xt1v, yt1v),
                              new Point(xt2v, yt2v));
                Rectangle t1 = new Rectangle(
                                   new Point(xt2v - r1, yt2v - r1),
                                   new Size(2 * r1, 2 * r1));
                g.DrawLine(p, new Point(xt2v, yt2v),
                              new Point(xR2, yR2));
                Rectangle t2 = new Rectangle(
                                   new Point(xR2 - r1, yR2 - r1),
                                   new Size(2 * r1, 2 * r1));
                g.DrawEllipse(p, t2);
                Pen p1 = new Pen(Color.Cyan, 1);
                Rectangle t3 = new Rectangle(
                                   new Point(xR2 - Rt, yR2 - Rt),
                                   new Size(2 * Rt, 2 * Rt));
                g.DrawEllipse(p1, t3);
                Thread.Sleep(kesleltet);
            }

            public void Forgat(int j, int e1, int e2, Form1 form)
            {
                double szog;
                szog = j * 3.141596 / 180.0;
                xv = (int)(e1 * (Rt * Math.Sin(szog)));   // trunc
                yv = (int)(Rt + e2 * (Rt * Math.Cos(szog))); //trunc
                Számol();
                Rajzol(form);
            }

            public void Mozog(Form1 form)
            {
                int i, j, ki;
                ki = 0;
                for (j = 1; j <= 4; j++)
                {
                    switch (j)
                    {
                        case 1:
                            for (i = 0; i <= 90; i++)
                            {
                                 Forgat(i, 1, -1, form);
                            }
                            break;
                        case 2:
                            for (i = 90; i >= 0; i--)
                            {
                                 Forgat(i, 1, 1, form);
                            }
                            break;

                        case 3:
                            for (i = 0; i <= 90; i++)
                            {
                                 Forgat(i, -1, 1, form);
                            }
                            break;
                        case 4:
                            for (i = 90; i >= 0; i--)
                            {
                                 Forgat(i, -1, -1, form);
                            }
                            break;
                    }
                    if (ki == 1) break;
               }
           }

 A program futási eredményei:

GRAFIKA: Hanoi tornyai

Írjunk grafikus programot, amely a Hanoi tornyai logikai játékot 3 rúd felhasználásával oldja meg A feladat az, hogy az első rúdról átpakolja a korongokat a harmadik rúdra,  segítségül használja a 2. rudat, azonban a szabály

  • egyszerre csak egy korong mozgatható;
  • mindig csak a legfelső korongot szabad levenni és áttenni egy másik rúdra;
  • egy korong nem rakható nála kisebb átmérőjű korongra.

 A feladat megoldása

//Hanoi_Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Hanoi_Form1
{
    public partial class Form1 : Form
    {
        public Form
        {
             InitializeComponent()
        }

        HanoiTornyai ht = null;

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                 int korongszam = Convert.ToInt32(textBox1.Text);
                 int várakozás = Convert.ToInt32(textBox2.Text);

                // várakozás a lépések között
                ht = new HanoiTornyai(korongszam, panel1, várakozás);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
             ht.Megold();
        }
    }
}

//Hanoi.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;

namespace Hanoi_Form1
{
    //  -------- Korong osztály  --------
    class Korong
    {
        public int meret { get; set; }
        public Color color { get; set; }

        public Korong(int m, Color c)
        {
            meret = m;
            color = c;
        }

        // Például az 5 méretű korong: **"**
        public override String ToString()
        {
            string ps = "\"";
            if (meret > 2)
            {
                 ps = new string('*', meret / 2) + ps +
                      new string('*', meret / 2);
            }
           return ps;
        } 
     }

    //  --------  Palca osztály  -------- 

    class Palca
    {
        private String nev;
        private Stack<Korong> korongok = new Stack<Korong>();

        public Palca(String n)
        {
            nev = n;
        }

        public void Rateszi(Korong k)
        {
            if (korongok.Count == 0)  // első korong, ráteszi
                korongok.Push(k);
            else
                if (korongok.Peek().meret >= k.meret)  // ráteszi
                     korongok.Push(k);
                else
                {
                    MessageBox.Show("Kisebbre nem tehető nagyobb!");
                    Environment.Exit(-1);
                }
        }

        public Korong Leveszi()
        {  // leveszi a felső korongot
            if (korongok.Count == 0)
            {
                MessageBox.Show("Nincs mit levenni!");
                Environment.Exit(-1);
                return null; // a fordító kedvéért
            }
            else
            {
                Korong k = korongok.Pop();
                return k;
            }
        }

        public Korong this[int index]
        { // indexelő a pálcán lévő korongok eléréséhez
            get
            {
                if (index < korongok.Count)
                {
                    return korongok.ElementAt
                           (korongok.Count - index - 1);
                }
                else
                    return new Korong(0, Color.Black);
            }
        } 

        public override String ToString()
        {
              return nev;
        }
     }

    //  --------  HanoiTornyai osztály  -------- 
    public class HanoiTornyai
    {
        public int MAXMERET { get; set; }
        public int korongszam { get; set; }
        public int palcahossz { get; set; }

        Palca[] palcak = new Palca[3];
        Panel panel = null;
        Random rnd = new Random();

        int maxmeret;
        float char2pixelX;
        float char2pixelY;
        int palcahpix;
        int valtas = 0;

        public HanoiTornyai(int kszam, Panel pan, int ms)
        {
            korongszam = kszam;
            palcahossz = kszam + 3;
            MAXMERET = 2 * kszam + 1

            panel = pan;
            valtas = ms;

            maxmeret = panel.ClientSize.Width / 3;
            char2pixelX = (float)maxmeret / MAXMERET;
            char2pixelY = char2pixelX * 2;
            palcahpix = (int)(palcahossz * char2pixelY);

            palcak[0] = new Palca("első");
            // A 0. palcára felteszi a megadott számú korongot
            for (int i = korongszam; i > 0; i--)
                palcak[0].Rateszi(new Korong(2 * i + 1,
                         Color.FromArgb(rnd.Next(256),
                         rnd.Next(256), rnd.Next(256)))); // ..7,5,3
            palcak[1] = new Palca("második");
            palcak[2] = new Palca("harmadik");
            Rajzol(); // megjelenítjük a pálcákat
        }

        public void Megold()
        {
              Hanoi(korongszam, palcak[0], palcak[1], palcak[2]);
        }

        private void Hanoi(int n, Palca honnan, Palca mivel,
                           Palca hova)
        {
            if (n == 1)
                HonnanHovaMozgatas(honnan, hova);
            else
            {
                Hanoi(n - 1, honnan, hova, mivel);
                HonnanHovaMozgatas(honnan, hova);
                Hanoi(n - 1, mivel, honnan, hova);
            }
        }

        private void HonnanHovaMozgatas(Palca innen, Palca ide)
        {
            ide.Rateszi(innen.Leveszi());
            Rajzol();
        }

        public void Rajzol()
        {
            Graphics g = panel.CreateGraphics();
            g.Clear(panel.BackColor);

            int maxy = panel.ClientSize.Height - 20;
            int miny = maxy - palcahpix;

            Pen pen = new Pen(Color.Brown, 10);
            for (int x = maxmeret / 2; x < 3 * maxmeret;
                                          x += maxmeret)
            {
                g.DrawLine(pen, new Point(x, miny),
                                new Point(x, maxy));
            }

            int pozx, pozy, km;
            for (int i = palcahossz - 1; i >= 0; i--)
            {
                for (int p = 0; p < palcak.Length; p++)
                {
                    km = palcak[p][i].meret;
                    if (km != 0)
                    {
                        pozx = (int)((2 * p + 1) * maxmeret - km
                               * char2pixelX) / 2;
                        pozy = (int)(maxy - (i + 1) * char2pixelY);

                        Brush brush = new SolidBrush
                                          (palcak[p][i].color);
                        g.FillRectangle(brush,
                                        new Rectangle(pozx, pozy,
                        (int)(km * char2pixelX), (int)char2pixelY));
                    }
                }
            }
            Thread.Sleep(valtas);
        }
    }
}

A program futási eredményei:

 

GRAFIKA: Billentyűk kezelése

Írjunk programot, amely az A billentyű leütésére a négyzetet sárgára, B leütésére zöldre, 1 (D1) leütésére türkizre, Enter leütésére pirosra színezi ki.

A feladat megoldása

             private void Form1_KeyDown(object sender, KeyEventArgs e)
         {   
            int x = 50, y = 40, m = 100;
            Pen p = new Pen(Color.Blue, 2);
            Graphics g = this.CreateGraphics();
            Rectangle t = new Rectangle(new Point(x,y),
                                        new Size(m,m));
            switch (e.KeyCode)
            {
                case Keys.A:
                    g.DrawRectangle(p, t);
                    g.FillRectangle(Brushes.Yellow, t);
                    label1.Text = "A betű leütése: sárga";break;
                case Keys.B:
                    g.DrawRectangle(p, t);
                    g.FillRectangle(Brushes.Green, t);
                    label1.Text = "B betű leütése: zöld";break;
                case Keys.Enter:
                    g.DrawRectangle(p, t);
                    g.FillRectangle(Brushes.Red, t);
                    label1.Text = "Enter leütése: piros";break;
                case Keys.D1:
                    g.DrawRectangle(p, t);
                    g.FillRectangle(Brushes.Cyan, t);
                    label1.Text = "1 leütése: türkiz";break
             }
        }

 A program futási eredményei:

 

GRAFIKA: CheckBox vezérlő használata

Írjunk programot, amely grafikus felületen szövegablakba beírt szöveget megjeleníti piros vagy kék színnel, kisbetűs vagy nagybetűs alakban. A feladat megvalósításához használjunk a CheckBox vezérlőket.

 A feladat megoldása

         private void checkBox1_CheckedChanged(object sender,
                                               EventArgs e)
         {
            if (checkBox1.Checked)
                textBox1.ForeColor = Color.Blue;
            else
                textBox1.ForeColor = Color.Red;
         }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox1.ForeColor = Color.Black;
            checkBox1.Checked = false;
            checkBox2.Checked = false;
            checkBox1.Enabled = false;
            checkBox2.Enabled = false;
        }

        private void checkBox2_CheckedChanged(object sender,
                                              EventArgs e)
        {
            if (checkBox2.Checked)
            {
                 textBox1.Text= textBox1.Text.ToUpper();
            }
            else
            {
                 textBox1.Text = textBox1.Text.ToLower();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            checkBox1.Enabled = false;
            checkBox2.Enabled = false;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            checkBox1.Enabled = true;
            checkBox2.Enabled = true;
        }

A program futási eredményei:

    

 

GRAFIKA: Föld Nap körüli pályán való mozgásának modellezése

Tervezzünk animációt a Föld Nap körüli pályán való mozgásának modellezésére

A feladat időkezeléséhez a Timer eszköz timer1 objektumpéldányát használjuk, melynek Interval tulajdonságát  100-ra állítottuk be. A timer1_Tick eseménykezelő mozgatja a Földet a Nap körül. Kör, Vonal és a Tárgy osztályokat használtuk a feladat megoldásához.

A feladat megoldása

                public partial class Form1 : Form
     {
        public Form1()
        {
            InitializeComponent();
        }     

        Targy pt = null;
        int szog = 0, dszog = -1; // fok

        // START, az animáció indítása,
        // illetve a STOP után az animáció folytatása
        private void button1_Click(object sender, EventArgs e)
        {
            int xk = this.ClientSize.Width / 2;
            int yk = this.ClientSize.Height / 2;
            pt = new Targy(xk, yk, 20);
            pt.Rajzol(this);
            timer1.Interval = 50;
            timer1.Start();
        }

        // STOP, az animáció működésének felfüggesztés
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            szog = (szog - dszog) % 360;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            szog = (szog + dszog) % 360;
            pt.Mozog(
this, szog * Math.PI / 180.0);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Blue;
        }

        // KILÉPÉS a programból
        private void button3_Click(object sender, EventArgs e)
        {
             Application.Exit();
        }

        private void Form1_FormClosing(object sender,
                                      FormClosingEventArgs e)
        {
             e.Cancel = true;
             DialogResult dlgres;
             dlgres = MessageBox.Show("Valóban ki akar lépni?",
                                      "Figyelem",
                                      MessageBoxButtons.YesNo,
                                      MessageBoxIcon.Question);
             if (dlgres == DialogResult.Yes)
             {
                  e.Cancel = false;
             }
         }
     }

    class Kor
    {
        public int x, y, r;
        public Kor(int x0, int y0, int r0)
        {
            x = x0; y = y0;
            r = r0;
        }

        public void Mozog(int x0, int y0, int r0)
        {
            x = x0; y = y0;
            r = r0;
        }

        public void Rajzol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            Rectangle t = new Rectangle(new Point(x - r,
                                   y - r), new Size(2 * r, 2 * r));
            g.FillEllipse(Brushes.Lime, t);
        }

        public void Torol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            Rectangle t = new Rectangle(new Point(x - r,
                                 y - r), new Size(2 * r, 2 * r));
            g.FillEllipse(Brushes.Blue, t);
        }
    }

    class Vonal
    {
        public int x, y, xv, yv;

        public Vonal(float x0, float y0, float xv0, float yv0)
        {
            x = (int)x0; y = (int)y0;
            xv = (int)xv0; yv = (int)yv0;
        }
    }

    class Targy
    {
        public Kor Nap, Fold;
        public Vonal[] v;

        public Targy(int x, int y, int r)
        {
            Nap = new Kor(x, y, r);
            Fold = new Kor(0, 0, 0);
            v = new Vonal[4];
            v[0] = new Vonal(x - 1.5f * r, y - 1.5f * r,
                             x + 1.5f * r, y + 1.5f * r);
            v[1] = new Vonal(x - 1.5f * r, y + 1.5f * r,
                             x + 1.5f * r, y - 1.5f * r);
            v[2] = new Vonal(x - 2 * r, y, x + 2 * r, y);
            v[3] = new Vonal(x, y - 2 * r, x, y + 2 * r);
        }

        public void Rajzol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            for (int i = 0; i < 4; i++)
            {
                 g.DrawLine(Pens.Yellow, new Point(v[i].x,
                            v[i].y), new Point(v[i].xv, v[i].yv));
            }

            Rectangle t = new Rectangle(new Point(Nap.x –
                                 Nap.r, Nap.y - Nap.r),
                                new Size(2 * Nap.r, 2 * Nap.r));
            g.FillEllipse(Brushes.Yellow, t);
        } 

        public void Mozog(Form1 form, double szog)
        {
            const int er1 = 200, er2 = 100;
            Fold.Torol(form);
            int xFold = (int)(Nap.x + er1 * Math.Cos(szog));
            int yFold = (int)(Nap.y - er2 * Math.Sin(szog));
            Fold.Mozog(xFold, yFold, 10);
            Fold.Rajzol(form);
        }

     A program futási eredményei:

GRAFIKA: Művelet trackBar használatával

Írjunk programot, amely  összead két pozitív egész számot, melynek értékeit numericUpDown használatával lehet beállítani, az eredményt szövegablakban jeleníti meg és ezt az értéket trackBar is kijelzi.

A feladat megoldása

            decimal x, y;
        int ered;
        private void button1_Click(object sender, EventArgs e)
        {
            x = numericUpDown1.Value;
            y = numericUpDown2.Value;
            ered = (int)x + (int)y;
            trackBar1.Value = ered;
            textBox1.Text = ered.ToString();
        }

        private void numericUpDown2_ValueChanged(object sender,
                                                 EventArgs e)
        {
            textBox1.Text = "";
            trackBar1.Value = 0;
        }

        private void numericUpDown1_ValueChanged(object sender,
                                                 EventArgs e)
        {
            textBox1.Text = "";
            trackBar1.Value = 0;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            trackBar1.Minimum = 0;
            trackBar1.Maximum = 50;
            numericUpDown1.Minimum = 0;
            numericUpDown1.Maximum = 25;
        }

A program futási eredményei:

GRAFIKA: Műveletek numericUpDown használatával

Írjunk programot, amely két pozitív egész számot numericUpDown felhasználásával állít be és  rádiógombok segítségével jelöli ki az összeadás, kivonás és a szorzás műveletet.

A feladat megoldása

        private void button1_Click(object sender, EventArgs e)
        {
            decimal a, b, ered;
            a = numericUpDown1.Value;
            b = numericUpDown2.Value;
            if (Összead.Checked)
            {
                ered = a + b;
                textBox1.Text = ered.ToString();
            }
            else if (Kivon.Checked)
            {
                ered = a - b;
                textBox1.Text = ered.ToString();
            }
            else if (Szoroz.Checked)
            {
                ered = a * b;
                textBox1.Text = ered.ToString();
            }
        }

        private void Összead_CheckedChanged(object sender,
                                            EventArgs e)
        {
             textBox1.Text = "";
        }

        private void Kivon_CheckedChanged(object sender,
                                          EventArgs e)
        {
             textBox1.Text = "";
        }

        private void Szoroz_CheckedChanged(object sender,
                                           EventArgs e)
        {
             textBox1.Text = "";
        }

        private void numericUpDown1_ValueChanged(object sender,
                                                 EventArgs e)
        {
             textBox1.Text = "";
        }

        private void numericUpDown2_ValueChanged(object sender,
                                                 EventArgs e)
        {
              textBox1.Text = "";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Text = "Műveletek";
            numericUpDown1.Minimum = 0;
            numericUpDown1.Maximum = 100;
            numericUpDown2.Minimum = 0;
            numericUpDown2.Maximum = 100;
                }

 A program futási eredményei:

GRAFIKA: Összeadás numericUpDown használatával

Írjunk programot, amely két pozitív egész szám ( 0 - 100) összegét numricUpDown használatával oldja meg,

A feladat megoldása

            decimal x, y, ered;
        private void numericUpDown1_ValueChanged(object sender,
                                                 EventArgs e)
        {
            // leolvassa a beállított értéket
            x = numericUpDown1.Value;
            y = numericUpDown2.Value;
            ered = x + y;
            numericUpDown3.Value = ered; // eredményt megjeleníti
        }

        private void numericUpDown2_ValueChanged(object sender,
                                                 EventArgs e)
        {
            x = numericUpDown1.Value;
            y = numericUpDown2.Value;
            ered = x + y;
            numericUpDown3.Value = ered;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            numericUpDown1.Maximum = 100;
            numericUpDown2.Maximum = 100;
            numericUpDown3.Maximum = 200;
       }

A program futási eredménye:

GRAFIKA: 4 képes animáció imageList használatával

Írjunk programot, amely 4 képes animációt hoz létre ImageList használatával.

A feladat megoldása

A feladat megoldásához 2 formot használunk. A Form1  felületén egy cimke mezőben lévő szöveg jelzi, hogy ImageList vezérlőt használunk több kép animációjára. Két nyomógomb van a Form1 felületén, az egyik gombbal indítjuk az animációt, a másik gombbal kilépünk a programból,

A Form2 felületén egy pictureBox1 lesz melynek Image mezejébe kerül az imageList Images következő képe az animáció számára. A ciklus változó az i 0.ra lesz állítva és a timer1_Click eseménykezelő a beállított késleltetéssel kerül meghívásra, ahol az i ciklus változó moduló (%) 4-gyel 0 tól 3.ig működteti az animációt. Ezzel a módszerrel sok mozdulatot tervezhetünk az animáció számára.

Form1 programja

         private void Kilepes_Click(object sender, EventArgs e)
    {
        Application.Exit(); // kilépés a programból
    }

    private void Animacio_Click(object sender, EventArgs e)
    {
         Form2 form2 = new Form2(); // Form2 létrehozása
         form2.ShowDialog();        // Form2 megjelenítése
    }

 Form2 programja

         int i = 0;
     private void timer1_Tick(object sender, EventArgs e)
     {
         pictureBox1.Image = imageList1.Images[i]; // kép betöltése
         i = (i+1) % 4;   // a ciklus 0-3 -ig változik
     }

 A Form2 szerkesztői felületén kell létrehozni a Timer és a ImageList objektumot a Toolbox felületéről  Components  alatt kiválasztva és rajta kattintva, így megjelenik a timer1 és a imageList1 objektum a szerkesztői felület bal alsó sarkában, majd rajra való kattintással létrejön a timer1_Tlick eseménykezelő, amit a programban használunk. A timer1 Interval tulajdonsága 500 msec-re van állítva. Az animációt lehet lassítani és gyorsítani is ennek változtatásával.

Lista feltöltése az Add gombbal.

A program futási eredménye:

A Animáció gombon kattintva működik Form2 felületén az animáció 4 képpel.

   

    

süti beállítások módosítása