PDA

View Full Version : سوال: چگونگی استفاده از "Invalidate(System.Drawing.Region region)"



leilamansouri
جمعه 10 آذر 1391, 12:04 عصر
با سلام به تمامی دوستان.
یک برنامه ی Paint نوشتم و میخوام که تنها محدوده ی مربوط به ترسیم شکل جدیدم (خط، دایره، مستطیل) دوباره ترسیم بشه. از تابع Invalidate استفاده کردم. که یکی از حالات این تابع Invalidate(System.Drawing.Region region) هست. اما این مقدار ورودی که باید به این تابع بدم رو نمیدونم چطور تعریف و مشخص کنم. اگر از "Invalidate(System.Drawing.Rectangle rc)" استفاده کنم، درصورت ترسیم دایره، اطراف اون رو هم به اندازه ی یه مستطیل پاک میکنه. لطفا راهنمایی کنید که چطور Region را تعریف کنم. آیا این تابع با این ورودی خواسته من رو برآورده میکنه؟

plus
جمعه 10 آذر 1391, 13:27 عصر
بله اصولا ویندوز برای اینکه مساله Invalidate شدن کاملا بهینه باشه، از Region استفاده میکنه تا دقیقا فقط مکان مورد نظر دوباره Paint بشه.Region محیطی رو مشخص میکنه که هیچ حالتی نداره و میتونی نا منظم باشه.
کلاس Regin توی همون System.Drawing تعریف شده.برای اینکه یک Region به شکل دایره ایجاد کنید باید ابتدا یک GraphicsPath به شکل دایره درست کنید.GraphicsPath در System.Drawing.Drawing2D تعریف شده:


GraphicsPath graphicsPath = new GraphicsPath();
graphicsPath.AddEllipse(new Rectangle(0, 0, 100, 100));

تا اینجا یک GraphicsPath به شکل دایر در محدوده مربع مشخص شده ایجاد کردیم. حالا این رو باید به عنوان پارامتر به سازنده Region بدین:


Region region = new Region(graphicsPath));
Invalidate(region);

توجه کنید که حتما فضاهای اختصاص پیدا کرده به اشیای گرافیکی رو آزاد کنید. ترجیحا از روش using استفاده کنید.