PDA

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



reza69
سه شنبه 20 تیر 1391, 23:43 عصر
سلام به همه ی بچه ها
من برای رسم اشکال گرافیکی مشگلی ندارم ولی نمیدونم چرا موقعی که این کد رو توی form load اجرا میکنم اجرا نمیشه ولی وقتی توی رویداد کلیک فرم میگذارم اجرا میشه؟
Dim Graphic As Graphics = MyBase.CreateGraphics
Graphic.FillRectangle(Brushes.Red, 50, 100, 300, 400)
Graphic.DrawRectangle(Pens.Black, 50, 100, 300, 400)
Graphic.Dispose()

the king
چهارشنبه 21 تیر 1391, 00:04 صبح
اجرا میشه اما موقع نمایش فرم Invalidate میشه و هر چی رسم کرده بودید میره پی کارش.
همونطور که وقتی یک فرم دیگه روی بخشی از رسم تون رو بپوشونه با جابجا شدن اش پاک میشه.
اگر قرار همیشه در حالت رسم بمونه منتقل اش کنید به رخداد Paint

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.FillRectangle(Brushes.Red, 50, 100, 300, 400)
e.Graphics.DrawRectangle(Pens.Black, 50, 100, 300, 400)
End Sub


یا اگه فقط یکبار رسم اش می کنید و بعدا مهم نیست که پاک بشه، داخل رخداد Shown بنویسید :

Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Dim Graphic As Graphics = MyBase.CreateGraphics
Graphic.FillRectangle(Brushes.Red, 50, 100, 300, 400)
Graphic.DrawRectangle(Pens.Black, 50, 100, 300, 400)
Graphic.Dispose()
End Sub

reza69
چهارشنبه 21 تیر 1391, 14:37 عصر
خیلی ممنون برنامه جواب داد
یک سوال داشتم شما میدونید چرا تو form load جواب نمیده؟ یا بهتر بگم آیا منطق vb.net اینه؟ چه عاملی باعث میشه داخل form load جواب نده؟ چرا در حالت form load وقتی یک فرم دیگه روی فرم مورد نظر بکشیم نقاشی پاک میشه؟

the king
چهارشنبه 21 تیر 1391, 16:07 عصر
خیلی ممنون برنامه جواب داد
یک سوال داشتم شما میدونید چرا تو form load جواب نمیده؟ یا بهتر بگم آیا منطق vb.net اینه؟ چه عاملی باعث میشه داخل form load جواب نده؟ چرا در حالت form load وقتی یک فرم دیگه روی فرم مورد نظر بکشیم نقاشی پاک میشه؟

فرم مثل هر پنجره دیگری یک بخش گرافیکی داره که هر وقت لازم بشه کل اش یا بخشی از اون باید مجددا رسم بشه. اگه شما برای نگهداری رسم های قبلی
از حافظه ای مثل BufferedGraphics یا Bitmap استفاده نکنید هر بار باید از نو هر چی رسم کرده بودید رو مجددا رسم کنید، وگرنه چون حافظه ای از رسم های
قبلی وجود نداره پاک میشه.
موقعی که فرم توسط فرم دیگری پوشانده میشه، یا اندازه فرم عوض میشه یا یک تغییر در مشخصات اصلی اش رخ میده، رخداد Paint فراخوانی میشه تا
هر چی لازمه داخلش رسم بشه. شما در رخداد Load وقتی که هنوز فرم به کاربر نشون داده نشده ، چیزی رسم می کنید، بعد زمانی که فرم نشون داده میشه
هر چی که رسم کرده بودید میره پی کارش و رخداد Paint کل فرم رو از نو رسم می کنه، چی رو رسم می کنه؟ با رنگ یکدست زمینه، فرم رو پر می کنه.