Kan geen oplossing vinden voor mijn probleem

Status
Niet open voor verdere reacties.

Wortel95

Gebruiker
Lid geworden
15 sep 2012
Berichten
7
Hoi Allemaal,

Ik ben nieuw met c# en ik probeerde om een smiley te maken. Dit was gelukt, maar daarna wilde ik natuurlijk meer. Door middel van een trackbar wil ik de vrolijkheid van mijn smiley kunnen aanpassen. Helaas lukt het mij niet om dit te doen (weet niet waarom het niet lukt). Zou iemand kunnen kijken wat ik fout doe? PS. Ik weet niet hoe ik mijn code beter kan neerzetten, sorry :(

Alvast bedankt,
William

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;

namespace Test_Windows3
{

class HalloForm : Form
{
TrackBar tbar = new TrackBar();
TextBox tbox = new TextBox();
int testVrolijk;


public HalloForm()
{
this.Text = "Smiley";
this.BackColor = Color.White;
this.Size = new Size(500, 500);
this.Paint += this.tekenScherm;
}

void tekenScherm(object obj, PaintEventArgs pea)
{
//Trackbar
tbar.Location = new System.Drawing.Point(0, 320);
tbar.Height = 40;
tbar.Width = 300;
tbar.Maximum = 100;
tbar.Minimum = -100;
tbar.LargeChange = 10;
tbar.SmallChange = 5;
tbar.TickFrequency = 0;
Controls.Add(tbar);
tbar.Scroll += new System.EventHandler(tbar_Scroll);

tbox.Location = new System.Drawing.Point(400, 16);
tbox.Size = new System.Drawing.Size(48, 20);
Controls.Add(tbox);

this.tekenSmiley(pea.Graphics, 0, 0, 300, 300, Brushes.Blue, Brushes.Black);
}

public void tbar_Scroll(object sender, System.EventArgs e)
{
// Display the trackbar value in the text box.

testVrolijk = tbar.Value;
tbox.Text = "" + testVrolijk;
}

void tekenSmiley(Graphics gr, int x, int y, int width, int height, Brush kleur, Brush oogKleur)
{
//Kijken of het positief of negatief is
int vrolijkBreed;
int vrolijkHoog;
if (testVrolijk < 0) {
vrolijkBreed = -180;
vrolijkHoog = 2;
} else {
vrolijkBreed = 180;
vrolijkHoog = (2 + (testVrolijk/50));
}

Pen blackPen = new Pen(Color.Black, 3);
// Draw ellipse to screen.
gr.DrawEllipse(blackPen, x, y, width, height);
gr.FillEllipse(kleur, x, y, width - 1, height - 1); //Gele kleur
gr.FillEllipse(oogKleur, x+(width / 4), y+(height / 4), (width / 6), (width / 6)); //Linkeroog
gr.FillEllipse(oogKleur,x+(width - (width / 3) - (width/12)), y+(height / 4), (width / 6), (width / 6)); //Rechteroog
gr.DrawArc(Pens.Black, x+(width / 4), y+(height / vrolijkHoog), (width / 2), (int)(height / (4.0 - Math.Abs(testVrolijk)/50.0)), 0, vrolijkBreed); //Mond

}
}

class HalloWin3
{
static void Main()
{
HalloForm scherm;
scherm = new HalloForm();
Application.Run(scherm);
}
}
}
 
Na het wijzigen van je slepen van je trackbar moet je even het paint event opnieuw triggeren:
Code:
this.Invalidate();

Ook zou ik het plaatsen van de trackbar en textbox even in de constructor zetten. Als je vanuit de toolbox je controls op een form sleept komt alles fijn in een designer file te staan zodat je het niet allemaal hier in hebt staan.
 
Hoi,

bedankt voor je antwoord. ik heb dit gezet in het paint event en hierdoor lukt het. ik zal vanavond wel ff googlen wat this.Invalidate(); precies doet, zodat ik het ook wat beter snap.

nogmaals bedankt!
william
 
Laatst bewerkt:
hierdoor houdt het geheel op met flikkeren als je de vrolijkheid veranderd. maar waarom? :D
 
dankje, maar dan moet ik nog wel dat ander stukje code erin hebben toch?
 
ja, door de invalidate method wordt alles opnieuw gepaint wanneer nodig en de doublebuffer is om te 'flickeren' tegen tegaan

Als je begint met C# misschien niet het beste gebied om mee te beginnen (of je moet al bekend zijn met dingen zoals classes, methods, types, statements etc)
 
Heel erg bedankt. Ik heb zelf lang gewerkt met PHP maar nu wil ik me ook verdiepen in c#.

Nog 1 klein vraagje: Ik probeer een soort simulator te maken die controleert of een ingevoerd getal wel klopt. Dit doe ik in de console. Nu is het met PHP zo dat je van een ingevult getal gewoon getal[...] kunt doen en je dan ziet wat er is ingevult op die plek. Dit kan niet met C# volgens mij, maar is dit überhaupt wel mogelijk (met substring bijvoorbeeld)?

Mvg,
William
 
Laatst bewerkt:
Met input[0] haal je het character op index 0 uit een string, en substring werkt waarschijnlijk zoals bij php.

Zie voorbeeld:
Code:
static void Main(string[] args)
{
	Console.WriteLine("Input:");
	string input = Console.ReadLine();

	if (string.IsNullOrEmpty(input))
	{
		Console.WriteLine("No input was found...");
	}
	else
	{
		Console.WriteLine("The input from the user is: {0}", input);

		Console.WriteLine("The first character that was entered is: {0}", input[0]);
		Console.WriteLine("The second character that was entered is: {0}", input[1]);
		Console.WriteLine("The first 3 characters that were entered are: {0}", input.Substring(0, 3));
		Console.WriteLine("The last character that was entered is: {0}", input[input.Length - 1]);
	}

	Console.Read();
}
(copy paste in console application project)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan