Beginners vraag i.v.m. graphics

Status
Niet open voor verdere reacties.

Matthlord

Nieuwe gebruiker
Lid geworden
10 mei 2010
Berichten
1
Hallo iedereen

Ik ben een student grafische en digitale media aan de Artevedehogeschool.
1 van onze vakken is programmeren (dit gaat over c#)
Nu moeten wij een kleine windows forms applicatie maken, jammer genoeg gaven de leerkrachten enkel les over console applicaties.
Dit heeft tot logisch gevolg dat ik redelijk snel vast kwam te zitten.

Mijn opdracht is een paint-applicatie maken, door te klikken op het canvas(een panel) kan de gebruiker lijnen, rechthoeken, driehoeken, cirkels en ovalen tekenen. De gebruiker kan ook kiezen tussen 3 lijndiktes en 4 kleuren.

Ik ben er al in geslaagd deze figuren op mijn applicatie te tekenen met vaste cöordinaten vastgelegd in mijn programmeercode.

Er zijn echter 2 problemen die ik ondervind:

- Ik slaag er niet in om deze figuren op mijn canvas(panel) zelf te tekenen, dit lukt me aleen op de form zelf.

- Wat ik ook probeer, ik kan mijn applicatie niet overtuigen om de punten die ik op mijn form aanklik ook echt te registreren. Ik mag zoveel klikken als ik wil, er verschijnt geen lijn. Dit lukt me alleen met vaste coordinaten
vb:
e.Graphics.DrawLine(P, 20, 20, 200, 200); werkt perfect
maar: e.Graphics.DrawLine(P, punt1, punt2); werkt niet

Als er iemand mij hiermee kan helpen ben ik je eeuwig dankbaar :D

~Matthias

P.S. sorry van mijn ondermaats nederlands, ik ben maar een belg :d.

P.P.S Hier is mijn code zo ver

Code:
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;
using System.Drawing.Drawing2D;
using System.Collections;

namespace Lijn
{
    public partial class Form1 : Form
    {
        Point punt1, punt2, punt3;
        public Form1()
        {  
            InitializeComponent();
            CenterToScreen();
            SetStyle(ControlStyles.ResizeRedraw, true);
        }
        #region Windows Form Designer generated code

        #endregion

        protected override void OnPaint(PaintEventArgs e)
        {

            using (Pen P = new Pen(Color.Black))
            {

                //e.Graphics.DrawLine(P, punt1, punt2);
                e.Graphics.DrawLine(P, punt1, punt2);
            }

        }

        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
            if (punt1 == null)
            {
                punt1 = new Point(punt1.X, punt1.Y);
                punt1.X = e.X;
                punt1.Y = e.Y;
            }            
            
            if (punt2 == null)
            {
                punt2 = new Point(punt2.X, punt2.Y);
                punt2.X = e.X;
                punt2.Y = e.Y;
            }

        }

    }
}
 
hulp aan graphisch student

Een point is een valuetype dus kan nooit null zijn. (je if structuur staat if(punt1 == null), kan nooit )

Code:
public partial class PaintForm : Form
    {
        private Point p1 = Point.Empty;
        private Point p2 = Point.Empty;

        public PaintForm()
        {
            InitializeComponent();            
        }

        private void PaintForm_Paint(object sender, PaintEventArgs e)
        {
            // Initialise graphics surface
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            // Initialise pens & brushes
            Pen pen = new Pen(Color.Blue, 10);
            // Do the actual drawing            
            if (p1 != Point.Empty && p2 != Point.Empty)
            {
                g.DrawLine(pen, p1, p2);
            }
        }

        private void PaintForm_MouseClick(object sender, MouseEventArgs e)
        {
            if (p1 == Point.Empty)
            {
                p1 = new Point(e.X, e.Y);
            }
            else if (p2 == Point.Empty)
            {
                p2 = new Point(e.X, e.Y);
            }
            else
            {
                p1 = new Point(e.X, e.Y);
                p2 = Point.Empty;                    
            }
            // Roept het paint event aan
            this.Invalidate();
        }
    }

Het 'paint' event triggert enkel wanneer je je applicatie opstart of wanneer het venstertje opnieuw getoond moet worden. Bijvoorbeeld na het minimaliseren. Als je ook op een ander moment wil painten (zoals na die mouseclick) moet je je form 'invalideren', dat doe je met die this.Invalidate();

maar voor de rest ben je goed bezig
veel succes matthias
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan