PDA

View Full Version : رسم اشکال در paint



elahebayati
سه شنبه 07 اردیبهشت 1389, 09:17 صبح
من paint رو با c#طراحی کردم ولی مشکلم اینه که : مثلا وقتی میخوام دایره بکشم از زمانی که موس رو روی picture boxفشار میدم تا زمانی که اونو رها میکنم چیزی کشیده نمیشه ولی به محض رها کردن موس یهو شکل دایره کشیده میشه .من میخوام همزمان با حرکت دادن موس موقعیت دایره رو بهم نشون بده و همزمان که کلید رو نگه داشتم دایره رو بکشه دقیقا مثل panit در ویندوز

mehdidanesh
سه شنبه 07 اردیبهشت 1389, 09:40 صبح
سلام
می تونم کدتونو نگاه کنم تا بهتون بگم مشکل کجاست

elahebayati
سه شنبه 07 اردیبهشت 1389, 09:57 صبح
سلام
می تونم کدتونو نگاه کنم تا بهتون بگم مشکل کجاست

pic = pictureBox1.CreateGraphics();
pen1 = new Pen(color1, 3);
switch (refrence)
{
case 1: pic.DrawEllipse(pen1, x1, y1, x2, y2);
break;
case 2: pic.DrawLine(pen1, new PointF(x1, y1), new PointF(x2, y2));
break;
case 3: pic.DrawRectangle(pen1, x2, y2, x1, y1);
break;

}
}
این کد رو امتحانی نوشتم خیلی ابتدایی است

mehdidanesh
سه شنبه 07 اردیبهشت 1389, 10:04 صبح
ببینم تو رسم خط همزمان وقتی که می کشی نشون می ده

elahebayati
سه شنبه 07 اردیبهشت 1389, 10:18 صبح
ببینم تو رسم خط همزمان وقتی که می کشی نشون می ده
نه نشون نمیده منم مشکلم همینه
شما یه مقاله یا متنی که خیلی راهنمایی کنه ندارید ؟
اگه خودتون میتونید کمک کنید که کمال تشکر رو ازتون دارم....

exlord
سه شنبه 07 اردیبهشت 1389, 10:28 صبح
bool draging = false;
int initX;
int initY;
int dX;
int dY;
private void Form3_Paint(object sender, PaintEventArgs e)
{
g = this.CreateGraphics();
g.DrawEllipse(p, initX, initY, dX, dY);

}

private void Form3_MouseDown(object sender, MouseEventArgs e)
{

draging = true;

initX = e.X;
initY = e.Y;

}

private void Form3_MouseMove(object sender, MouseEventArgs e)
{

if (draging)
{
dX = e.X - initX;
dY = e.Y - initY;
this.Invalidate();

}
}

private void Form3_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
}

mehdidanesh
سه شنبه 07 اردیبهشت 1389, 10:43 صبح
bool draging = false;
int initX;
int initY;
int dX;
int dY;
private void Form3_Paint(object sender, PaintEventArgs e)
{
g = this.CreateGraphics();
g.DrawEllipse(p, initX, initY, dX, dY);

}

private void Form3_MouseDown(object sender, MouseEventArgs e)
{

draging = true;

initX = e.X;
initY = e.Y;

}

private void Form3_MouseMove(object sender, MouseEventArgs e)
{

if (draging)
{
dX = e.X - initX;
dY = e.Y - initY;
this.Invalidate();

}
}

private void Form3_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
}


دوست عزیز شما g,p را کجا تعریف کردین؟

elahebayati
سه شنبه 07 اردیبهشت 1389, 10:49 صبح
دوست عزیز شما g,p را کجا تعریف کردین؟
g همون pic در کدی است که فرستادم و p همون pen
pen و pic سراسری تعریف شدن

elahebayati
سه شنبه 07 اردیبهشت 1389, 11:02 صبح
دوست عزیز شما g,p را کجا تعریف کردین؟
کدی که گذاشتین دقیق کار میکنه از محبتتون مچکرم فقط یه ایراد داره:
وقتی داریم بیضی رو میکشیم و موس رو به سمت بالا میبریم(یعنی به سمت جایی که برای اولین بار موس کلیک میکنه وبه صورت معکوس حرکت کنیم) چیزی نشان نمیدهد علتشم منفی شدن حاصل تفریق است ، میتونید این مشکل رو هم حل کنید

mehdidanesh
سه شنبه 07 اردیبهشت 1389, 11:09 صبح
دوست عزیز می بخشید می شه دستور تعریف g,p رو هم دقیق بگی
گفتی تو public تعریفش کنم دیگه؟

elahebayati
سه شنبه 07 اردیبهشت 1389, 11:18 صبح
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool draging = false;
int initX;
int initY;
int dX;
int dY;
Pen p = new Pen(Color.Black, 2);
Graphics g;






private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (draging)

{
dX = e.X - initX;
dY = e.Y - initY;
this.Invalidate();
}


}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
draging = true;

initX = e.X;
initY = e.Y;
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
g = this.CreateGraphics();
g.DrawRectangle (p, initX, initY, dX, dY);

}
}
}
این کد کاملیه که شما برام فرستادید منم اجراش کردم

elahebayati
سه شنبه 07 اردیبهشت 1389, 11:20 صبح
دوست عزیز می بخشید می شه دستور تعریف g,p رو هم دقیق بگی
گفتی تو public تعریفش کنم دیگه؟
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 mypaint
{
public partial class Form1 : Form
{

bool draging = false;

int dX;
int dY;

Point[] polypoint;
Graphics pic;
Color color1;
int refrence;
int x1, y1, x2, y2;
public Form1()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
refrence = 2;
}

private void button3_Click(object sender, EventArgs e)
{
refrence = 3;
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{

draging = true;
x1 = e.X;
y1 = e.Y;
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
Pen pen1 = new Pen(color1, 3);
pic = pictureBox1.CreateGraphics();
pen1 = new Pen(color1, 3);
switch (refrence)
{
case 1: pic.DrawEllipse(pen1, x1, y1, x2, y2);
break;
case 2: pic.DrawLine(pen1, new PointF(x1, y1), new PointF(x2, y2));
break;
case 3: pic.DrawRectangle(pen1, x2, y2, x1, y1);
break;
case 4:
Point point1=new Point(x1,y1);
Point point2=new Point(x2,y2);

polypoint[1] = point1;
polypoint[2] = point2;
pic.DrawPolygon(pen1,polypoint );
break;
}
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
x2 = e.X;
y2 = e.Y;
if (draging)
{
dX = e.X - x1;
dY = e.Y - y1;
this.Invalidate();

}


}

private void button4_Click(object sender, EventArgs e)
{
color1 = Color.Blue;
}

private void button7_Click(object sender, EventArgs e)
{
color1 = Color.Red;
}

private void button6_Click(object sender, EventArgs e)
{
color1 = Color.Green;
}

private void button5_Click(object sender, EventArgs e)
{
color1 = Color.Black;
}

private void button8_Click(object sender, EventArgs e)
{
pic.Clear(Color.White );
}

private void button1_MouseDown(object sender, MouseEventArgs e)
{
refrence = 1;
}

private void button9_Click(object sender, EventArgs e)
{
refrence = 4;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Pen pen1 = new Pen(color1, 3);
pic = this.CreateGraphics();
pic.DrawEllipse(pen1, x1, y1, dX, dY);

}


}
اینم کیه که خودم نوشتم

elahebayati
سه شنبه 07 اردیبهشت 1389, 11:42 صبح
دوست عزیز می بخشید می شه دستور تعریف g,p رو هم دقیق بگی
گفتی تو public تعریفش کنم دیگه؟




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 mypaint
{
public partial class Form1 : Form
{

bool draging = false;

int dX;
int dY;

Point[] polypoint;
Graphics pic;
Color color1;
int refrence;
int x1, y1, x2, y2;
public Form1()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
refrence = 2;
}

private void button3_Click(object sender, EventArgs e)
{
refrence = 3;
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{

draging = true;
x1 = e.X;
y1 = e.Y;
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
Pen pen1 = new Pen(color1, 3);
pic = pictureBox1.CreateGraphics();
pen1 = new Pen(color1, 3);
switch (refrence)
{
case 1: pic.DrawEllipse(pen1, x1, y1, x2, y2);
break;
case 2: pic.DrawLine(pen1, new PointF(x1, y1), new PointF(x2, y2));
break;
case 3: pic.DrawRectangle(pen1, x2, y2, x1, y1);
break;
case 4:
Point point1=new Point(x1,y1);
Point point2=new Point(x2,y2);

polypoint[1] = point1;
polypoint[2] = point2;
pic.DrawPolygon(pen1,polypoint );
break;
}
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
x2 = e.X;
y2 = e.Y;
if (draging)
{
dX = e.X - x1;
dY = e.Y - y1;
this.Invalidate();

}


}

private void button4_Click(object sender, EventArgs e)
{
color1 = Color.Blue;
}

private void button7_Click(object sender, EventArgs e)
{
color1 = Color.Red;
}

private void button6_Click(object sender, EventArgs e)
{
color1 = Color.Green;
}

private void button5_Click(object sender, EventArgs e)
{
color1 = Color.Black;
}

private void button8_Click(object sender, EventArgs e)
{
pic.Clear(Color.White );
}

private void button1_MouseDown(object sender, MouseEventArgs e)
{
refrence = 1;
}

private void button9_Click(object sender, EventArgs e)
{
refrence = 4;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Pen pen1 = new Pen(color1, 3);
pic = this.CreateGraphics();
pic.DrawEllipse(pen1, x1, y1, dX, dY);

}


}
}


این کدیه که نوشتم،واضحه؟

exlord
سه شنبه 07 اردیبهشت 1389, 11:47 صبح
کدی که گذاشتین دقیق کار میکنه از محبتتون مچکرم فقط یه ایراد داره:
وقتی داریم بیضی رو میکشیم و موس رو به سمت بالا میبریم(یعنی به سمت جایی که برای اولین بار موس کلیک میکنه وبه صورت معکوس حرکت کنیم) چیزی نشان نمیدهد علتشم منفی شدن حاصل تفریق است ، میتونید این مشکل رو هم حل کنید
تو فرم من که کار میکنه ........ البته من رو فرم میکشم نه Picturebox

mehdidanesh
سه شنبه 07 اردیبهشت 1389, 11:59 صبح
خب حالا اگه که ما بخواهیم برای هریک از دایره ، مستطیل ، خط یک دکمه تعریف کنیم که اگه روی هر کدام از دکمه ها زده شد عملکرد خودش را انجام دهد چه باید بکنیم

elahebayati
سه شنبه 07 اردیبهشت 1389, 17:10 عصر
من که کاملا گیج شدم تورو خدا واضح بگید

iman_me
سه شنبه 07 اردیبهشت 1389, 23:13 عصر
خوب اینکه واضه باید یک متغییر بزاری و بگی هر وقت یک باتن کلیک شد مقدار متغییر یه چیزی بشه و بعد
بر اساس همون توی موس_موت شرط بزاری

elahebayati
چهارشنبه 08 اردیبهشت 1389, 13:52 عصر
خوب اینکه واضه باید یک متغییر بزاری و بگی هر وقت یک باتن کلیک شد مقدار متغییر یه چیزی بشه و بعد
بر اساس همون توی موس_موت شرط بزاری
اگه بخوام تویpicturebox این کارو کنم چی؟ منظورم رسم همزمان و نشون دادن شکل در حال ترسیم هست

iman_me
چهارشنبه 08 اردیبهشت 1389, 21:16 عصر
اینی که میگی هیچ ربطی به چیزی که من گفتم نداره
مثلا
تو رویداد کلیک button1 متغییر =C,...
و توی پیکچر باکس
if button1==C
دستور دایره
if button1==E
دستور مربع
.
.
.