تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كود مشابه و ربما موديل
#1
السلام عليكم

لقد طرحت في احدى المرات سؤال عن تحريك عناصر في الفورم

فكان الجواب كالتالي :

في الكلاس موديل :

كود :
Public WithEvents Picture As PictureBox

Dim SSX As Integer
Dim SSY As Integer

Private Sub Picture_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
SSX = X
SSY = Y
End Sub

Private Sub Picture_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
   Picture.Left = Picture.Left + X - SSX
   Picture.Top = Picture.Top + Y - SSY
End If
End Sub


و في الفورم في القسم العام

كود :
Dim Ctrl1Event As New ControlEvents
Dim Ctrl2Event As New ControlEvents
Dim Ctrl3Event As New ControlEvents
Dim Ctrl4Event As New ControlEvents
Dim Ctrl5Event As New ControlEvents
Dim Ctrl6Event As New ControlEvents
Private Sub Form_Load()
Set Ctrl1Event.Picture = Picture1
Set Ctrl2Event.Picture = Picture2
Set Ctrl3Event.Picture = Picture3
Set Ctrl4Event.Picture = Picture4
Set Ctrl5Event.Picture = Picture5
Set Ctrl6Event.Picture = Picture6
End Sub

و اريد عمل كود ينفذ اوامر معينة عند ضغط كوماند1 او 2 أو 3 أو .....................100

المهم ماذا تنصحوني بالموديل او بالكلاس موديل

و هل اكتب كود شبيه في الكلاس موديل اعلاه مع تغيير اسم الكلاس موديل الى الاسم الذي اريده و تغيير الكود الى الكود الذي اريده

و سؤال أخير اذا ما استعملت عنصرا معينا من فورم معين مثلا ليكن الامر : command12.visible=false

فهل اكتبه كما هو ام اكتبه بالشكل :form4.command12.visible=false
الرد }}}}
تم الشكر بواسطة:
#2
السلام عليكم...

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

للتوضيح: ضع زر أمر (Command1 مثلاً) و انقر عليه نقراً مزدوجاً لفتح الكود. سيكون إجراء الحدث Click للزر كالتالي:
كود :
Private Sub Command1_Click()

End Sub

الآن امسح هذا الكود (الإجراء) و عد إلى خصائص الزر و اضبط الخاصية Index على صفر، ثم انقر عليه نقراً مزدوجاً مرة أخرى. سيكون الإجراء بالشكل التالي:
كود :
Private Sub Command1_Click(Index As Integer)

End Sub

الآن يمكنك نسخ الزر و لصقه أي عدد من المرات، و سيكون الاسم المشترك لجميع الأزرار هو Command1 و تتميز فيما بينها برقم الـ Index. الميزة في هذا أن جميع الأزرار (أو أية مكونات أخرى في مصفوفة مكونات) تتشارك نفس الإجراءات مع تمرير رقم الـ Index للمكون الذي قام باستدعاء الإجراء. بالإضافة إلى ذلك يمكنك إضافة المزيد من المكونات إلى المصفوفة أو إزالتها منها دون الحاجة إلى تعديل الكود. ممتاز!

لنفرض - في مثالك - أن لدينا مربعات صورة (PictureBox) ضمن مصفوفة مكونات باسم pbx تحتوي على 10 عناصر (0 إلى 9) أو أي عدد تريده. سيكون كود التحريك كالتالي:
كود :
Private SSX As Integer
Private SSY As Integer

Private Sub pbx_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    SSX = X
    SSY = Y
End Sub

Private Sub pbx_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        pbx(Index).Left = pbx(Index).Left + X - SSX
        pbx(Index).Top = pbx(Index).Top + Y - SSY
    End If
End Sub

و إذا كان لدينا مجموعة أزرار في مصفوفة باسم MyCommand و نريد تنفيذ أمر معين حسب الزر المضغوط فإن الإجراء يكون كالتالي:
كود :
Private Sub Command1_Click(Index As Integer)
    Select Case Index
        Case 0
            ' تم النقر على الزر الأول
        Case 1
            ' تم النقر على الزر الثاني
        Case 2
            ' تم النقر على الزر الثالث
        ' ...
            ' ...
        Case N
            ' تم النقر على الزر الأخير
    End Select
End Sub

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة:
#3
و إذا كان لدينا مجموعة أزرار في مصفوفة باسم MyCommand و نريد تنفيذ أمر معين حسب الزر المضغوط فإن الإجراء يكون كالتالي:
كود:

كود :
Private Sub Command1_Click(Index As Integer)
    Select Case Index
        Case 0
            ' تم النقر على الزر الأول
        Case 1
            ' تم النقر على الزر الثاني
        Case 2
            ' تم النقر على الزر الثالث
        ' ...
            ' ...
        Case N
            ' تم النقر على الزر الأخير
    End Select
End Sub


اذا كيف نعرف هذه المصفوفة و كيف ننسب العناصر اليها

و اذا بدلنا العبارة
كود :
Private Sub Command1_Click(Index As Integer)


بــــــــــ
كود :
Private Sub Picture1_DblClick()

هل سوف ينفذ عند الضغط مرتين على اي بكشتر في مصفوفة البكتشرات مثلا
الرد }}}}
تم الشكر بواسطة:
#4
السلام عليكم

- إذا أردت إنشاء مصفوفة أداوت لابد أن تكون من نوع واحد وبإسم واحد , فمثلاً تريد إنشاء مصفوفة أزرار بإسم MyCommand قم بتسميه أو زر بهذا الإسم وعند تسمية الزر الثاني ستأتيك رسالة من الفيجول تقول لك يوجد أداة بنفس الإسم هل تريد إنشاء مصفوفة أداوت ثم أضغط زر نعم وهكذا أي أداة من نفس النوع تسميها بنفس الإسم الموحد ستنضم لعناصر المصفوفه تلقائياً , وتقدر تغير ترتيب عناصر المصفوفة عن طريق خاصية الـ Index لكل أداة .

- تحياتي .
الرد }}}}
تم الشكر بواسطة:
#5
اوك شباب مشكورين بس انا بدي اكتب كودي مرة واحدة مو عيدو 100 مرة مثلا بالنسبة لنوع معين من العناصر و نوع معين من الاحداث
الرد }}}}
تم الشكر بواسطة:
#6
السلام عليكم

- لاتعيد الكود 100 مرة ، فقط مره واحده وضعه في حدث الClick وعند ضغط أي زر من المصفوفة سينفذ الكود .

كود :
Private Sub Command1_Click(Index As Integer)
    Magbox "Iam MyCommand My Index is " & Index
End Sub

- تحياتي .
الرد }}}}
تم الشكر بواسطة:
#7
مشكورين جدا
الرد }}}}
تم الشكر بواسطة:
#8
صار في تعارض مع الكود في الكلاس موديل الخاص بالتحريك يعني يعطي خطأ فما هو الحل لهذه المشكلة
الرد }}}}
تم الشكر بواسطة:
#9
السلام عليكم
- إستخدم هذه الطريقة أعتقد هي المثالية :

كود :
Dim SSX As Integer
Dim SSY As Integer


Private Sub Picture1_DblClick(Index As Integer)
MsgBox "Iam Picture1 My Index is " & Index
End Sub

Private Sub Picture1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
SSX = X
SSY = Y
End Sub

Private Sub Picture1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
   Picture1(Index).Left = Picture1(Index).Left + X - SSX
   Picture1(Index).Top = Picture1(Index).Top + Y - SSY
End If
End Sub

- تحياتي .
الرد }}}}
تم الشكر بواسطة:


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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم