تحريك الكنترولز في وقت التشغيل Runtime - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
السبت
2016-12-10
5:29 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

تحريك الكنترولز في وقت التشغيل Runtime
تحريك الكنترولز في وقت التشغيل Runtime

مقـــدمه
عند قيامنا بتصميم واجهة البرنامج فنحن نقوم بتنسيق اماكن الكنترولز , ووضعها كيفما نشاء , ولكن عند تشغيل البرنامج لن يكون باستطاعة المستخدم تغيير اماكن الكنترولز , ولكن اليوم سنشرح كيف يمكننا تحريك الكنترولز وتغيير اماكنها اثناء تشغيل البرنامج .
الفكره
الفكره ببساطة هو تغير الموقع Location الخاص بالكنترول اثناء التشغيل , والموقع هو عباره عن Point تتكون من احداثي x , y , يحددان مكان الكنترول داخل الفورم - او داخل الكنترول الاب - , حيث يبدأ الترقيم من الجانب الأيسر العلوي للفورم , وتكون اول نقطه 0,0 , وينتهي بالجانب الايمن السفلي حسب طول وعرض الفورم , ويأخذ كل كنترول داخل الفورم احداثي معين يحدد مكانه , بحيث يكون اول نقطه في الكنترول - الجانب الايسر العلوي للكنترول - هي النقطه التي تمثل الأحداثي الخاص به بالنسبه للفورم



فاذا اردنا تغيير مكان اي كنترول كل ما علينا هو اعطاؤه احداثي جديد يحدد مكانه الجديد , فلو كان مكان الكنترول 100 , 100 فاذا اردنا تغيير مكانه في اثناء وقت التشغيل مثلا عن طريق الضغط على زر معين , فقط نضع الامر التالي داخل الحدث الخاص بالنقر
control.Location = new Point(100 , 150)

حيث تم وضع الكنترول في موضع جديد وهو 100,150 , واذا جربت الكود السابق سترى ان الكنترول قد تغير مكانه - وسيكون التغيير رأسي بسبب ثبات ال x كما هي 100 .

ولكن حتى الآن فالأمر بسيط , ولكن ماذا لو اردنا تحريك الكنترول من خلال سحبه بالماوس , كما نفعل تماماً في وقت التصميم , الفكره هي هي نفسها , فالموضوع يتعلق بالاحدائي الخاص بالكنترول , وكل المعضله تتمثل في كيفية تحديد الأحدائي الجديد مع حركة الماوس .
التطبيق
لتحريك الكنترول بالسحب عن طريق الماوس في وقت التشغيل , يجب تفعيل ثلاث احداث Event خاصه بالكنترول وهي :
1- MouseDown وهو الخاص بالضغط على الكنترول بالماوس .
2- MouseMove وهو الخاص بتحريك الماوس .
3- MouseUp وهو الخاص بترك الكنترول , او انتهاء الضغط .

ستمر العمليه على اكثر من مرحله , ففي البدايه سيضغط المستخدم على الكنترول بالماوس , وفي هذه المرحله يعمل الحدث MouseDown , وفي هذه المرحله يتم تحديد مكان الكنترول عند بداية الضغط , وتخزين مكانه ليتم استخدامه كمرجع طوال فترة التحريك , ثم تأتي مرحلة تحريك الماوس اثناء الضغط , وفيها يعمل الحدث MouseMove , وهي اهم مرحلة ففيها يتحرك الكنترول الى حيث يتحرك الماوس , وفيه هذه المرحله يتم تحديد وتحديث دائم لمتغيرين اساسين , هما المكان الجديد للكنترول - الذي اتخذه من خلال السحب - , وايضا مكان الماوس داخل الكنترول نفسه , وبعد ذلك يكون الاحداثي الجديد من خلال المعادلتين

الاحداثي النهائي الجديد = احداثي الكنترول طبقاً لأخر تحديث + احداثي الماوس داخل الكنترول - الاحداثي المرجعي للكنترول عند الضغط

حيث مع تحريك الماوس يتم وضع الكنترول في الاحداثي الجديد دائما , ثم المرحله الثالثه وهو ترك الكنترول , وفيها يتم انهاء عملية التحريك عند انهاء الضغط والتحريك للكنترول , وكل تلك العمليات في الكود  
Moving  
 
حيث في البداية تم تعريف متغير جديد لتحديد النقطه المرجعيه , وايضاً تعريف متغير من نوع bool وذلك لتشغيل وايقاف عميلة التشغيل , فيتم تشغيلها عند الضغط على الكنترول MouseDown , وايقافها عند ترك الكنترول MouseUp , وفي داخل حدث التحريك MouseMove تم عمل الكود الجوهري للعمليه , فيتم التحريك فقط اذا كانت القيمة Move = true , وتم حساب الاحداثي x , y حسب المعادله المذكوره مسبقا , ثم ايقاف التحريك عند ترك الكنترول في الحدث MouseUp
تحميل المشروع
 Written by :  Mohamme Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-09-27 2:24 PM)
مشاهده: 1406 | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 0
إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz