ممنون دوست عزیز. خیلی مفید بود. اما من اول هم از همین FillEllipse استفاده کردم، اما برای فراخوانی Picturebox1_paint با مشکل برخوردم
توی پست اولم گفته بودم،
کد:
Addhander Picturebox1.Paint, AddressOf PictureBox1_Paint
با این Picturebox_paint رو فراخوانی می کنم اما کارو انجام نمیده
میشه دقیقتر توضیح بدید. منظورتونو نمیفهمم.
ببینید، من برای رسم خطوط و دایره از این کد استفاده کردم.
کد:
Private Sub PicEdit_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PicEdit.Paint
If Manualy = False And Automatic = True Then
With e.Graphics
Using redBrush As New SolidBrush(Color.PaleGreen)
Using TPen As New System.Drawing.Pen(Color.PaleGreen, 1)
Dim rect As New Rectangle(x1, y1, xyWidth, xyHeight)
TPen.Width = My.Computer.Registry.GetValue(StrRegistry, "Size", Nothing)
.DrawEllipse(TPen, x1, y1, xyWidth, xyHeight)
.FillEllipse(redBrush, rect)
'.DrawLine(TPen, x2, y2, x3, y3)
End Using
End Using
End With
strResult = "Auto"
ElseIf Manualy = True And Automatic = False Then
With e.Graphics
Using redBrush As New SolidBrush(Color.Red)
Dim rect As New Rectangle(x1, y1, xyWidth, xyHeight)
.DrawEllipse(Pens.Red, x1, y1, xyWidth, xyHeight)
.FillEllipse(redBrush, rect)
End Using
End With
strResult = "Manual"
End If
End Sub
و برای اینکه این کد رو اجرا کنم از این کد استفاده کردم
کد:
Addhander PicEdit.Paint, AddressOf PicEdit_Paint
اما این کد عمل نمکنه و خطوط و دایره رو رسم نمیکنه. البته اگه توی button بذارم و یک مقدار بهش بدم عمل میکنه. اما توی برنامه ای که من نوشتم حداقل 100 دایره باید نمایش بده و بین این دایره ها خطوط بکشه.
حالا من نمیدونم مشکل از کجاست
من کد دومی رو توی یه حلقه for گذاشتم که هر نقطه ای که موقعیتش بدست میاد و نمایش بده، اما این کد اجرا نمیشه و به مرحله بعد میره و یه موقعیت دیگه رو بدست میاره
شاید اگه انطوری بگم بهتر باشه. این عکس زیر رو ببینید
من میخوام که این کارو انجام بدم
اون خط قرمزی که کشیدم
شرمنده نرسیدم جواب بدم.
این دستور
کد:
Addhander PicEdit.Paint, AddressOf PicEdit_Paint
میاد یه تابع رو به یه رویداد تخصیص میده. و این دستور کافیه که یک بار اجرا بشه.
بعد از اون با اجرای رویداد اون تابع فراخوانی میشه.
حالا از اینا که بگذریم من نمیدونم چطوری میخواید خط رو بکشید.
-رویداد paint در هر بار کشیده شدن کنترل اجرا میشه. یعنی وقتی یک تکه از اون بره زیر یه چیز دیگه یا از زیرش در بیاد یا refresh بشه. با این رویداد غیر از استفاده از refresh کنترلی روی زمان کشیده شدن ندارید و هر وقت درخواست کشیده شدن داده شد میتونید چیزی رو نشون بدید. ضمن این که هر بار باید کامل باید از اول همه چیز رو بکشید.
-اگه شما بر اثر یه رویداد دیگه یه خط رو میکشید و هر بار فقط یه خط رو به خطوط قبلی اضافه میکنید. بهتره ( به جای استفاده از رویداد paint ) یه شیئ bitmap درست کنید و روی اون نقاشی کنید و اونو نمایش بدید.