- Posts
- 3
- Organisaties
- OCMW Dendermonde
|
#1 —
11/06/2010 13:04
Beste,
Ik ben bezig aan het programmeren van een soort paint-programma in C#. Het is de bedoeling om de figuren, lijndiktes -en kleur aan te duiden via radiobuttons.
De code die ik nu heb - om een lijn te tekenen tussen 2 punten die je aanklikt - werkt niet.
Weet iemand hoe ik het kan oplossen?
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 Jana_VanBuggenhout
#123;
public partial class Form1 #58; Form
#123;
public Form1#40;#41;
#123;
InitializeComponent#40;#41;;
//positie van de muis opslagen
Point x1 = new Point#40;MousePosition.X#41;;
Point x2 = new Point#40;MousePosition.Y#41;;
//create graphics
Graphics myGraphics = base.CreateGraphics#40;#41;;
//pen aanmaken
Pen myPen = new Pen#40;Color.Black#41;;
myPen.Width = 5;
#125;
private void Form1_Load#40;object sender, EventArgs e#41;
#123;
#125;
private void radioButton1_CheckedChanged#40;object sender, EventArgs e#41;
#123;
#125;
private void radioButtonLijn_MouseClick#40;object sender, MouseEventArgs e#41;
#123;
#125;
private void radioButtonLijn_Click#40;object sender, EventArgs e#41;
#123;
myGraphics.DrawLine#40;myPen, x1, x2#41;;
#125;
private void groupBoxFiguur_Enter#40;object sender, EventArgs e#41;
#123;
#125;
#125;
#125;
mvg
Jana Van Buggenhout
(dochter Annie Ydens)
|
|
#2 —
14/06/2010 22:48
Ik heb geen Visual Studio op deze pc staan, dus ik heb het niet kunnen uittesten, maar enkele dingen vielen me meteen op.
Een Point-object stelt, zoals de naam het zegt, een punt voor. Een punt wordt gedefinieerd door 2 coördinaten, een X- en een Y-coördinaat. Je geeft aan je Point-objecten (x1 en x2) enkel een X-coördinaat. Voor x1 maak je je X-coördinaat de X-waarde van je muis, voor x2 maak je je X-coördinaat de Y-waarde van je muis.
x1 en x2 zijn gedeclareerd in je constructor, maar worden daarbuiten opgeroepen. Een variabele is echter gebonden aan zijn scope. x1 en x2 kunnen op deze manier dus nooit in een andere methode dan de constructor worden gebruikt. Je maakt van de variabelen dus beter een object-eigenschap. Idem voor myGraphics en myPen.
Vervolgens zit er volgens mij ook nog een redeneerfout in. Je initialiseert twee punten aan in de constructor. Dit wil zeggen dat deze een waarde krijgen van zodra je programma opstart. Je 2 punten krijgen dus net dezelfde waarde, namelijk deze waar je muis op dat moment staat.
Wat je nu doet in je code is een lijn tekenen tussen twee punten op het moment dat je de radiobutton radiobuttonLijn aanklikt (twee punten die zoals eerder gezegd dezelfde waarde hebben).
Als ik me niet vergis (het is al even geleden), wordt er in C# getekend op een Panel-element. Wat je best doet dan is het Click-event van je Panel in de gaten houden. Als er op geklikt wordt controleer je de status van je radiobuttons (of je leest een object-eigenschap uit die ingesteld wordt op het Click-event van je radiobuttons).
Als in dit geval de radiobutton voor een lijn ingesteld staat, sla je de huidige muispositie op in een eerste Point (object-eigenschap!). Ook hou je bij dat er al 1 punt ingesteld is, zodat je bij een tweede klik weet dat er al een eerste punt is.
Bij de tweede klik, maak je opnieuw een Point aan met als waarde de muispositie. Je weet op dat moment dat er al een eerste punt is, en je roept de DrawLine-methode en geeft deze punten mee.
Nog heel wat werk voor de boeg dus. Als je tegen foutmeldingen aanloopt, waar je niet wijs uit raakt, stel je best eerst eens een breakpoint in op de lijn van de foutmelding, en ev. ook op de lijn ervoor. Dan zie je precies waar het foutloopt en welke waarden elke variabele heeft.
|