تبلیغات
banner
banner
banner
تبلیغات
banner

فیلم های آموزشی : 36 +

تعداد کاربران : 44 +

تعداد کل مطالب : 338 +

تعداد نظرات : 33 +

حضرت محمد (ص) : داناترین مردم کسى است که دانش دیگران را به دانش خود بیفزاید.

آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و نود و هفتم


 به نام خداوند جان آفرین حکیم سخن در زبان آفرین



آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و نود و هفتم

سلام به همه کاربران وب‌سایت لندلرن

قسمت صد و نود و هفتم


به اين ترتيب نقطه ي مورد نظر ايجاد شده است.

حال بررسي مي كنيم كه اگـر مقـداري در شـيئ objGraphicsItem قرار گرفته بود (مقدار آن مخالف null بود)، آن را به آرايه ي نقاط تشكيل دهنده ي فرم اضافه مي كنيم.

در انتها نيز متد Invalidate را در فرم برنامه (this) فراخواني مي كنيم .

با فراخواني اين متد در حقيقت به برنامـه مـي گوييم كه قسمتي از ظاهر فرم برنامه تغيير كرده است و ويندوز بايد آن را مجدداً رسم كند.

هنگامي كه ويندوز يك فرم را در صـفحه نمايش داد، تا زماني كه لازم نباشد آن را مجدداً رسم نمي كند.

اين كه چه هنگام بايد يك كنترل دوباره رسم شود توسط خود ويندوز به صورت اتوماتيك مشخص مي شود، اما اگر لازم باشد مي توانيم با فراخواني متد Invalidate به ويندوز بگوييم كه فـرم را مجدداً رسم كند.

به عبارت ديگر با استفاده از اين روش به ويندوز مي گوييم كه ظاهر يكي از كنترل هاي موجـود در فـرم برنامـه تغيير كرده است و بايد فرم را مجدداً رسم كند.

نكته: اگر با استفاده از كد، فقط ظاهر يكي از كنترلهاي موجود در فرم را تغيير داديد، مي توانيد متـد Invalidate را در آن كنترل فراخواني كنيد تا ويندوز فقط آن كنترل را مجدداً رسم كند .

خب، تاكنون زمان حركت ماوس بر روي فرم را تشخيص داده ايم و در اين زمان بر اساس ابزاري كه كاربر انتخاب كرده بود، شـيئ مناسبي را ايجاد كرده و آن را به ليست نقطه هاي نمايش دهنده ي فرم اضافه كرديم.

همچنين به ويندوز نيز اعلام كرديم كه طاهر فرم مجدداً بايد در صفحه رسم شود تا تغييرات ايجاد شده نمايش داده شوند.

فكر مي كنيد كه چه كارهاي ديگري را بايد انجام دهيم تا برنامه كامل شود؟
هنگامي كه يك فرم و يا يك كنترل درون فرم به ترسيم مجدد نياز داشته باشد، بايد اجازه دهيم كه ويندوز خودش تصميم بگيرد كه چه ز ماني بايد فرم را رسم كند.

در سيستم عامل ويندوز براي افزايش سرعت و كارايي، رسم كنتـرل هـا در صـفحه از اهميـت كمـي برخوردارند، بنابراين ويندوز زماني اين كارها را انجام مي دهد كه به اندازه ي كافي وقت آزاد داشته باشد.

رسم يك كنترل و يـا يـك فرم در صفحه نمايش از نظر ويندوز يك مورد حياتي و ضروري تلقي نمي شود،

بنابراين نمي توانيد از سيـستم عامـل انتظـار داشـته باشيد هنگامي كه يك فرم را به صورت نامعتبر مشخص كرديد، ويندوز به سرعت آن را مجدداً در صفحه نمايش رسم كند.

احتمـالاً اين مورد را در هنگام كار با برنامه ها زياد مشاهده كرده ايد كه اگر ويندوز در حال انجام فعاليت سنگيني در فرم باشد، پنجره ي فـرم به صورت يخ زده شده و هيچ چيز نمايش داده نمي شوند.

بنابراين نبايد هيچ موقع ويندوز را مجبور كنيد كه فرم شما را به سرعت در صفحه رسم كند.

در اين سيـستم عامـل بـيش از چنـدين هزار خط كد وجود دارند كه بهترين زمان براي رسم مجدد يك كنترل در صفحه نمايش را مشخص مي كنند.

بنـابراين فقـط كـافي است كنترلي كه نياز به ترسيم مجدد دارد را با استفاده از متد Invalidate مشخص كنيد و سپس اجازه دهيد كه ويندوز در اولين فرصت ممكن آن را مجدداً رسم كند.

هنگامي كه ويندوز بخواهد يك فرم و يا يك كنتـرل را مجـدداً در صـفحه نمـايش رسـم كنـد، رويـداد Paint را در آن كنتـرل فراخواني مي كند .

بنابراين بايد متدي را ايجاد كنيم تا هنگام رخ دادن اين رويداد اين متد اجرا شده و كنترل مورد نظر مـا را در فـرم مرس كند .

در اين متد نيز كافي است كه با استفاده از متد Draw از تك تك نقطه هـاي موجـود در فـرم بخـواهيم كـه خـود را در صفحه رسم كنند .

پس با استفاده از يك حلقه ي foreach بين تمام نقطه هاي موجود در ليست حركت كرده و متـد Draw را فراخواني مي كنيم .

هنگامي كه ويندوز رويداد Paint را فراخواني كرد، اطلاعات لازم در رابطه با رخ دادن ايـن رويـداد را بـا اسـتفاده از شـيئ اي از كلاس PaintEventArgs به متد ها مي فرستد.

اين شيئ خاصيت ها و متدهاي فراوانـي دارد و يكـي از آنهـا خاصـيت

Graphics است كه شيئ اي را از نوع Graphics.Drawing.System برمي گرداند. اين شيئ شـامل متـد ها و توابع زيادي است كه مي تواند براي ترسيم مورد استفاده قرار گيرد.

بنابراين اين شيئ را به عنوان پارامتر بـه متـد Draw مـي فرستيم تا در صورت نياز بتواند از آن استفاده كند.

حال كه تقريباً با نحوه ي كاركرد اين قسمت از برنامه آشنا شديم، بهتر است علت كند شدن برنامه و چـشمك زدن آن هنگـام رسـم يك شكل در فرم را بررسي كرده و آن را رفع كنيم. این مورد در قسمت صد و نود و هشتم بررسی شده است.


درباره نویسنده
سجاد اسدی
   سجاد اسدی

سجاد اسدی هستم دانشجوی رشته نرم افزار و علاقه مند به تدریس و یادگیری دروس مرتبط با تکنولوژی نرم افزار و اینترنت اشیاء جهت ارتباط با بنده مراجعه شود به آیدی سروش و تلگرام : @ordervira و پیج بنده در اینستاگرام instagram.com/sajjadred11 ""اللهم صل علی محمد و آل محمد"" برای شروع هیچ وقت دیر نیست. "الهم عجل لولیک الفرج"

دیدگاه بگذارید

avatar
  اشتراک  
اطلاع رسانی

aparat کانال آپارات

soroush کانال سروش

کانال آی گپ