PDA

View Full Version : سوال: مشکل در یک ترسیم توی فرم



pooya1072
دوشنبه 20 شهریور 1391, 01:02 صبح
سلام
من دو دستور یکسان ترسیم رو توی دو رویداد مختلف, یکی Form_Load و دیگری Form_Resize قرار دادم.





Public

ClassForm2

PrivateSub Form2_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
Dim HeightOfForm AsSingle = Me.Height
Dim WidthOfForm AsSingle = Me.Width
Dim XOfCenter AsSingle = WidthOfForm / 2
Dim YOfCenter AsSingle = HeightOfForm / 2
Dim G AsGraphics = Me.CreateGraphics
Dim P AsNewPen(Color.Black)
G.DrawLine(P, XOfCenter, 0, XOfCenter, HeightOfForm)
G.DrawLine(P, 0, YOfCenter, WidthOfForm, YOfCenter)
EndSub
PrivateSub Form2_Resize(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Resize
Dim HeightOfForm AsSingle = Me.Height
Dim WidthOfForm AsSingle = Me.Width
Dim XOfCenter AsSingle = WidthOfForm / 2
Dim YOfCenter AsSingle = HeightOfForm / 2
Dim G AsGraphics = Me.CreateGraphics
Dim P AsNewPen(Color.Black)
G.DrawLine(P, XOfCenter, 0, XOfCenter, HeightOfForm)
G.DrawLine(P, 0, YOfCenter, WidthOfForm, YOfCenter)
EndSub

End


Class


با لود شدن فرم اتفاقی نمیوفته ولی با تغییر اندازه فرم ترسیم به درستی انجام میشه.علت ترسیم نشدن در هنگام لود شدن فرم چیه و چطور باید این مشکل رو حل کنم؟
با تشکر

Hybrid
دوشنبه 20 شهریور 1391, 10:36 صبح
سلام ،

رویداد Load قبل از اینکه فرم نشون داده بشه اتفاق میوفته ( و سپس رویداد Paint اتفاق میوفته ) . هر وقت فرمی تحت رویداد Load نشون داده بشه Repaint میشه یعنی هر چی قبلا روش ترسیم کردین پاک میشه و جدیدا رسم میشن ، واسه حل مشکل شما میتونید ترسیماتتون رو در رویداد PictureBox ، Paint انجام بدین تا مشکل حل بشه یا اگه اصرار دارین در رویداد Load انجام بدین یک Btimap درست کنید و ترسیمات رو داخل اون انجام بدین و سپس به خاصیت Image از PictureBox نسبت بدین. یک PictureBox روی فرمتون قرار بدین و کد زیر رو داخل رویداد Load فرمتون کپی کنید و سپس نتیجه رو مشاهده کنید.


Dim bmp As Bitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim rectF As New RectangleF(0, 0, bmp.Width, bmp.Height)
Dim gBrush As Brush = New Drawing2D.LinearGradientBrush(rectF, Color.White, Color.SteelBlue, Drawing.Drawing2D.LinearGradientMode.Vertical)
g.FillRectangle(gBrush, rectF)
PictureBox1.Image = bmp
g.Dispose()