السلام عليكم ورحمة الله وبركاته
أخي الكريم
أول أمر ولعلها السمكة الأولى
هو أن تحدد أساسيات البرنامج - ما المطلوب وما هي الأدوات المستعملة وكم عددها - لأن هذا سيسهل عليك كثيرا
لأن أي تعديل عليه مستقبلا قد يكبدك وقتا وجهدا كنت تستطيع منذ البداية أن تتلافى ذلك
سأفترض بأن أساسيات برنامجك - مع أنني حتى الآن لا أعرفها تماما - هي تكوين شبكة من أحرف - لا أعرف حتى الآن عددها - تحتوي على كلمات معينة يقوم المستخدم بالبحث عنها فإذا كانت صحيحة يتم إدراجها تحت مسميات معينة وهي Verbs,Objects and Days
الآن نحدد الأدوات المستخدمة لذلك:
الأنسب في هذه الحالة أن نستخدم أداة Label
قمت بوضع Label1 حددت له بعض الخصائص كأن جعلت AutoSize يساوي False
وعرضه 44 × 41
الآن قمت بنسخ هذا الـ Label1 وعمل لصق له عدة مرات وفي كل مرة أقوم بصف ما تم لصقه إلى جوار ما قبله مستخدما الفأرة مع الضغط على زر alt للتحرك بحرية
ويجب هنا أن يتم صف الأدوات بالتلاصق التام مع بعضها البعض وإلا ستظهر مشاكل أثناء التنفيذ
بعد أن انتهينا من صف الأدوات قمت بفتح الملف Form1.Designer.vb
وقمت بإعادة ترتيب الأدوات ليسهل علي استدعاءها - لاحظ المثال الذي رفعته لك كيف قمت بترتيب الأدوات
حيث جعلت أول 12 ليبل هي تلك التي سنضيف إليها الكلمات ثم باقي الليبل 18 التي لاتهمنا ثم باقي الليبل الخاصة بالأحرف وعددها 110 ليبل وكلها مرتبة ترتيبا تصاعديا
انتهينا الآن من التصميم
الآن إلى كتابة الكود: كما قلت سابقا قمت بتعريف عدة متغيرات يعتمد عليه البرنامج
فأولها LabelsList التي تضم جميع الليبل الخاص بالأحرف
وهنا يأتي ترتيبي السابق لليبل حيث أنني طلبت من البرنامج استثناء أول 30 ليبل تجد ذلك في الأمر التالي لاحظ اللون الأحمر
كود :
LabelsList.AddRange(Me.Controls.OfType(Of Label)[color=#FF0000].Skip(30)[/color])
ثم متغير ColumnList وهي كما قلت أنها لليبل التي ستظهر فيها الكلمات التي تم التأشير عليها
وهنا أيضا يأتي دور الترتيب حيث أنني وضعتهم في مقدمة الأدوات فطلبت من البرنامج أن يأخذ أول 12 ليبل
وذلك بالأمر التالي - لاحظ اللون الأحمر
كود :
ColumnsList.AddRange(Me.Controls.OfType(Of Label)[color=#FF0000].Take(12)[/color])
بعد ذلك أضفت الكلمات إلى WordsList
الآن عرفت ثلاثة أحداث هي Mouse_Down,MouseMove and MouseUp
وهي للـ 110 ليبل الخاص بالأحرف
وهنا أهم العمليات ستجد أرقاما قد تسبب لك صداعا ولكن لا بأس سيتلاشى الصداع بإذن الله إذا عرفت ما هي الأرقام
أول الأرقام
كود :
StartingLabelLong = Math.Floor((Val(sender.Name.Substring([color=#FF0000]5[/color])) - [color=#0000FF]1[/color]) / [color=#00FF00]11[/color])
الرقم
خمسة
هذا الرقم سيطلب رقم الليبل حيث أنه وبواسطة الأمر SubString سيأخذ الرقم الموجود بعد كلمة Label وحيث أن عدد حروف Label خمسة فإذن سيأخذ ما بعد خمسة إلى آخر اسم الليبل فإذا كان اسم الليبل Label1
فسوف يعطي الرقم 1 وإذا كان الاسم Label110 فسوف يعطي الرقم 110 - الأمر سهل أليس كذلك؟!!!
ثاني الأرقام
الرقم
واحد
وهو يقوم بطرح واحد من الرقم السابق لأن عدد الليبل في الصف 11 فلو بدأنا بالـ Label11 سيكون الرقم 11 سنقسمه على 11 (عدد الليبل في الصف) ستكون النتيجة 1 وهذا خطأ نحن ما زلنا في أول صف فلو أنقصنا واحد من القيمة 11 سيصبح الناتج 10 ثم سنقسمه على 11 ستكون النتيجة صفر وهو الصحيح
ثالث الأرقام وهو المهم جدا جدا وهو سبب الخطأ الذي ظهر لك حين غيرت عدد الليبل في الصف
هذا الرقم هو
11
وهو عدد الليبل الموجود في الصف الواحد فكلما قمت بتغيير عدد الليبل في الصف وجب عليك تغيير هذا الرقم
للموضوع تتمة إن شاء الله
واعذرني وذلك بسبب انشغالي
بالتوفيق