تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيفية إنشاء أدوات جديدة
#4
السلام عليكم...

شكراً للأخ AL_BRNS الذي سبق بالإجابة.

إذا كنت تعرف مسبقاً ما هي المكونات التي تريد إنشاء نسخ منها أثناء التشغيل (أي بالكود) فإن أسهل طريقة هي استعمال مصفوفة المكونات (Control Array) أي مجموعة مكونات من نوع واحد (مثلاً CommandButton أو TextBox) و تنتمي لمصفوفة تحمل نفس الاسم و يميزها رقم المؤشر (Index).

لإنشاء مصفوفة مكونات استعمل إحدى طريقتين:

أ. بضط الخاصية Index:

1. ضع أول عنصر (مثلاً CommandButton) على الـ Form (نفرض أن اسمه سيكون Command1).
2. في الخاصية Index لـ Command1 اكتب 0 (صفر).

ستقوم VB تلقائياً بإنشاء مصفوفة مكونات اسمها Command1 و يصبح اسم أول عنصر فيها هو:
كود :
Command1(0)


ب. بالنسخ:

1. بعد وضع الـ Command1 على الـ Form انقر عليه بالزر الأيمن و انسخه (Copy أو اضغ Ctrl+C).
2. انقر على الـ Form بالزر الأيمن و ألصق (Paste أو اضغط Ctrl+V). ستسألك VB ما إذا كنت تريد إنشاء مصفوفة مكونات (Control Array) فأجب بنعم.

ستقوم VB تلقائياً بإنشاء مصفوفة مكونات اسمها Command1 و يصبح اسما أول عنصرين فيها هما:
كود :
Command1(0)
Command1(1)

* المفهوم من سؤالك أنك لا تريد وجود المكونات مسبقاً. استعمل الطريقة الأولى. أي بعد وضع مكون واحد اضبط الخاصية Index التابعة له على 0. و لكي لا يكون مرئياً بشكل مبدئي أثناء التشغيل اضبط الخاصية Visible التابعة له على False.

* في بداية الكود (في قسم التصريحات العام) عرف متغيراً كعداد، و اكتب إجراءاً لتحميل زر جديد:
كود :
Private ButtonCount As Integer

Private Sub CreateNewButton(ACaption As String, ALeft As Single, ATop As Single, AWidth As Single, AHeight As Single, ATag As String)
    ButtonCount = ButtonCount + 1

    Load Command1(ButtonCount)
    With Command1(ButtonCount)
        .Caption = ACaption
        .Move ALeft, ATop, AWidth, AHeight
        .Tag = ATag
        .Visible = True
    End With
End Sub

* عندما تريد إنشاء مكون جديد (CommandButton في هذا المثال) قم باستدعاء الإجراء السابق (في زر آخر أو في أمر قائمة أو حيثما تريد):
كود :
CreateNewButton "new_caption", new_left, new_top, new_width, new_height, "new_tag"

* استعملنا الخاصية Tag لنضع بها قيمة تميز الأزرار عن بعضها لغرض الكود.

مثلاً لنفرض أننا نريد إنشاء 3 أزرار تحرير (قص، نسخ، لصق):

كود :
CreateNewButton "Cut", 50, 50, Command1(0).Width, Command1(0).Height, "cut"
CreateNewButton "Copy", 50, 120, Command1(0).Width, Command1(0).Height, "copy"
CreateNewButton "Paste", 50, 190, Command1(0).Width, Command1(0).Height, "paste"

* كيف نجعل هذه الأزرار تنفذ عملاً ما؟
ننقر نقراً مزدوجاً على الزر الأصلي لفتح الكود على إجراء الحدث Click ستلاحظ أن له بارامتراً اسمه Index يشير إلى رقم الزر في مصفوفة المكونات (إذا لم يكن الزر عنصراً في مصفوفة مكونات فلن يكون لإجراء الحدث Click أية بارامترات). إذا كنا نعرف رقم مؤشر المكون الذي نتعامل معه فيمكننا استعمال البارامتر Index و لكننا - في هذا المثال - لا نعرف، و بالتالي سنستعمل الخاصية Tag كما ذكرنا سابقاً:

كود :
Private Sub Command1_Click(Index As Integer)
    Select Case Command1(Index).Tag
        Case "cut"
            ' كود القص
        Case "copy"
            ' كود النسخ
        Case "paste"
            ' كود اللصق
    End Select
End Sub


* الطريقة الثانية طويلة بعض الشيء و تحتاج إلى استعمال الـ Class Modules.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة: VB_Coder , AL_BRNS , النبراس12


الردود في هذا الموضوع
RE: كيفية إنشاء أدوات جديدة - بواسطة AL_BRNS - 26-02-14, 04:22 PM
RE: كيفية إنشاء أدوات جديدة - بواسطة ناجي إبراهيم - 26-02-14, 05:26 PM
RE: كيفية إنشاء أدوات جديدة - بواسطة VB_Coder - 26-02-14, 10:24 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Lightbulb [VB.NET] إنشاء فولد ووضع نسخه به من قاعدة البيانات AMRMOGA 1 277 17-11-24, 09:59 PM
آخر رد: Taha Okla
  [سؤال] كيفية تشغيل قاعدة بيانات برنامج VB6+Access على شبكة داخليه aboezzat84 3 3,256 21-04-24, 04:12 PM
آخر رد: qqqqqqq
Heart كيفية تغيير نوعية الــ DataBase أبو خالد الشكري 3 709 10-01-24, 10:55 PM
آخر رد: أبو خالد الشكري
  [vb6.0] سؤال حول كيفية عمل زر كوماند داخل عمود Msflexgrid جلال اليمني 4 1,035 14-09-23, 05:12 AM
آخر رد: جلال اليمني
  [سؤال] كيفية حذف إسم شخص من listbox من دون الضغط على الإسم؟ ihabgh123 2 706 12-06-23, 10:09 PM
آخر رد: ihabgh123
  [vb6.0] كيفية برمجة ادات "Office Ribbon" في الفيجوال بيزك 0.6 Hammam Khalfi 0 623 21-04-23, 03:39 PM
آخر رد: Hammam Khalfi
  [سؤال] كيفية عمل group على اكثر من متغير ف تقرير active report 2 aboezzat84 1 1,093 12-02-22, 11:00 PM
آخر رد: Taha Okla
  [vb6.0] كيفية قلب نص TextBox من اليمين إلى اليسار أبو خالد الشكري 6 1,823 25-12-21, 07:54 PM
آخر رد: أبو خالد الشكري
  [vb6.0] سؤال مهم : كيفية عمل progress bar يتحرك فعليا مع تنفيذ العمليات التي يتم اجراؤها hamada salah90 2 1,679 22-12-21, 07:50 PM
آخر رد: hamada salah90
  [vb6.0] كيفية تغيير خاصية Style للCommandButton في زمن التنفيذ ياسر عبد الكريم 0 1,130 16-11-20, 09:00 PM
آخر رد: ياسر عبد الكريم

التنقل السريع :


يقوم بقرائة الموضوع: