PDA

View Full Version : سوال: ایجاد lable در مختصات خاصی از صفحه



aapalireza
سه شنبه 02 فروردین 1390, 22:00 عصر
سلام
من قصد دارم در پروژه ای گرافیکی , کنار هر خطی که رسم میشه اطلاعاتی را بنویسم...
برای این کار نیاز دارم متنی مثلا lable ی را بسازم, سپس مختصات آن و زاویه ی کج شدن آن را به آن بدهم تا آن را کنار خط افقی یا عمودی یا زاویه دار بنویسم
اگر راهنماییم کنید مممنون میشوم.

exlord
سه شنبه 02 فروردین 1390, 22:06 عصر
lable لازم نیست ... با مختصات همون خطی که داری میکشی DrawString کن ...

aapalireza
سه شنبه 02 فروردین 1390, 23:29 عصر
lable لازم نیست ... با مختصات همون خطی که داری میکشی DrawString کن ...
ممنون
دقیقا همین را می خواهم
ولی من هر چه قدر جست و جو کردم, این متد را در رویداد paint تعریف کرده بودند...
خوب من نمی توانم هر جا خواستم و هر کجا خواستم رسم کنم؟!
برنامه ی من به طریقی است که ابتدا خط رسم میشود, سپس عددی به عنوان ورودی دریافت می شود و کنار خط نوشته می‌شود؛ چرخش متن هم میزان با زاویه ی خط...
آیا می توانید بیشتر راهنماییم کنید؟
بدیهی است که در این صورت e نداریم ...

hadi-z
چهارشنبه 03 فروردین 1390, 10:24 صبح
سلام
اینا رو ببینید
شاید بدردت بخوره

http://www.codeproject.com/KB/cpp/wsbarcode.aspx

http://www.dreamincode.net/forums/topic/108288-create-textbox-control-and-label-control-dynamically/

http://stackoverflow.com/questions/1621001/how-to-draw-string-on-an-image-to-be-assigned-as-the-background-to-a-control-in-w

aapalireza
چهارشنبه 03 فروردین 1390, 11:09 صبح
rotate متن چی؟
برای چرخاندن متن چه کنم؟!

exlord
چهارشنبه 03 فروردین 1390, 14:07 عصر
public class MyLine
{
public Point P1 { get; set; }
public Point P2 { get; set; }
public string Text { get; set; }
public Pen LinePen { get; set; }
public Font TextFont { get; set; }
public Brush TextBrush { get; set; }

public MyLine()
{
LinePen = new Pen(Color.Black);
TextFont = new Font("Tahoma", 10);
TextBrush = new SolidBrush(Color.Red);
}

public void Paint(Graphics g)
{
g.DrawLine(LinePen, P1, P2);
if (!String.IsNullOrEmpty(Text))
{
//horizental draw
PointF m = new PointF((P1.X + P2.X) / 2, (P1.Y + P2.Y) / 2);
//g.DrawString(Text, TextFont, TextBrush, m);

//shibdar
double radians = Math.Atan((P2.Y - P1.Y) / (P2.X - P1.X));
float degrees = (float)(radians * 180 / Math.PI);

g.TranslateTransform(P1.X, P1.Y);
g.RotateTransform(degrees);
m = new PointF((P2.X - P1.X) / 2, 0);
g.DrawString(Text, TextFont, TextBrush, m);
}
}
}


List<MyLine> lines = new List<MyLine>();
private void button1_Click(object sender, EventArgs e)
{
MyLine l = new MyLine() { P1 = new Point(300, 200), P2 = new Point(500, 400), Text = "Line1" };
lines.Add(l);
this.Invalidate();
}

private void Form3_Paint(object sender, PaintEventArgs e)
{
foreach (MyLine item in lines)
{
item.Paint(e.Graphics);
}
}