الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

منع المستثمر من الضغط ؟

بدأه kafi في 15 فبراير 2012 · 10 رد · 634 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

ارغب عند فتح الشاشة الرئيسية، بأن امنع المستخدم من الضغط على المفاتيح F1 وحتى F12 حتى لا تظهر للمستثمر بعض الشاشات الغير مناسبة مع عمل البرنامج

تم كتابة الكود اللازم وعمل بشكل صحيح

'{pgup.... pgDn}
Select Case KeyCode
	Case 33, 34
	KeyCode = 0
End Select

'{F1....F12}
If KeyCode >= 112 And KeyCode <= 123 Then
	KeyCode = 0
End If

ولكن المشكلة ان هذا الكود يجب ان يكرر مع كل عنصر موجود على النموذج

اي مع عنصر الادخال Textbox

ومع زر الفتح

ومع زر الاغلاق

هل من طريقة لجمع الكود المذكور فعال على كامل عناصر النموذج، اي في اي وضعية كان المستثمر موجود وتم الضغط على الازرار المذكور، فيتم الغاء اثرها

ارجو تعديل المثال المرفق

المثال معمول على اكسس 2007

وشكرا

Ex 46.rar

post-32358-019171200 1329334968_thumb.jp

post-32358-057060900 1329335218_thumb.jp

المرفقات
1.JPG2.JPG
#2

اخي الفاضل

تفضل ملفك بعد التعديل

طريقة الحل :

لا داعي لكتابة الأكواد الخاصة بعدم تمكين المفاتيح الغير مطلوبة عند كل مربع نص او عند كل زر امر ولكن نستخدم هذا الكود الشامل والكفيل بمنع استخدام المفاتيح لكامل النموذج

عند حدث الحالي يجب تفعيل مفتاح المعاينة

Private Sub Form_Current()
Me.KeyPreview = True
End Sub

ثم نستخدم هذا الكود الشامل عند حدث ضغط مفتاح للأسفل

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim ctl As Control
        For Each ctl In Me.Controls
        If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton Then

        Select Case KeyCode
        Case 33, 34
        KeyCode = 0
        End Select

        If KeyCode >= 112 And KeyCode <= 123 Then
        KeyCode = 0
        End If
        End If
        Next ctl

End Sub

za-Ex46-UP.rar

بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 16 فبراير 2012 في 10:05

3
#3

الف الف شكر على دقة وسرعة الاجابة

#4

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

الاخت زهرة

لقد وجدت نفسي انني سوف اكرر الكود الذي تفضلت به مشكورة مرات عديدة، على عدد شاشات النماذج التي في برنامجي، مما يعني اضافة مئات الاسطر من ذات الكود

حاولت ان اضع الكود المذكور ضمن وحدة نمطية

Sub f_Press_Check(frm As Form)
Dim ctl As Control
    	'For Each ctl In Me.Controls
    	For Each ctl In frm.Controls
    	If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton Then

         	'{pgup.... pgDn}
        	Select Case KeyCode
            	Case 33, 34
            	KeyCode = 0
        	End Select

        	'{F1....F12}
        	If KeyCode >= 112 And KeyCode <= 123 Then
            	KeyCode = 0
        	End If

    	End If
    	Next ctl
End Sub

ولكن لم ينجح معي الامر

ارجو تعديل المثال المرفق

والف شكر

Ex47.rar

#5

معذرة اخي الكريم

لا يمكنك عمل ذلك لأن الحدث مرتبط بالنموذج فقط ولا يمكن وضعه في وحده نمطية خارجية ثم تقوم بإستدعاؤه فلن يكون له اي تأثير على النموذج لأن حدث KeyDown يجب ان يكون في النموذج فقط

بالتوفيق

1
#6

الف شكر اختي زهرة على اجابتك

#7

السلام عليكم

اثناء التجربة للكود الذي تفضلت به الاخت زهرة مشكورة والذي يمنع المستخدم من الضغط على المفاتيح F1 .... وحتى ...F12 ، ظهرت مشكلة جديدة معي وهي في حال كان المستثمر واقف على نموذج فرعي ( ولم يكن واقف على حقل Text box او Button)

اعرف ان الكود بحاجة الى اضافة تعبير فيما اذا المستثمر واقف على النموذج، ولكنني لم اعرف ما هو

If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton Then

ارجو تعديل المثال المرفق بحيث يتم توسيع الكود ليشمل فيما اذا كان المستثمر واقف على النموذج وضغط على احد المفاتيح المذكور اعلاه

وشكرا

Ex 49.rar

post-32358-009269000 1331234989_thumb.jp

المرفقات
1.JPG
#8

اخي الفاضل

هذه هي جميع الكائنات التي يمكن ان تكون في القاعدة

post-15367-098173800 1331236601_thumb.gi

طبعا من ضمنها النموذج الفرعي acSubform

وسيكون الكود بعد التعديل بهذه الطريقة

If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton  Or ctl.ControlType = acSubform Then

بالتوفيق

المرفقات
T1.gif
#9

شكرا اختى زهرة على سرعة اجابتك

والف الف شكر على انك وضعت جدول بجميع الكائنات التي يمكن ان تكون في القاعدة

قمت بوضع الكود كما تفضلت اختى ,,, ولكن

للاسف مازال الضغط على الزر F1 يظهر رسالة وكذلك الضغط على F12

تم تجريب كل القيم الاخرى ( لعلى وعسى ..) التي تفضلت بها ، والتي ضمها الجدول المرفق

'

If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton Or ctl.ControlType = acSubform Then

    	If ctl.ControlType >= 100 And ctl.ControlType <= 126 Then

ولكن للاسف دون جدوى

ارجو الاطلاع على المثال المرفق، ....وتعديله

والف الف شكر

Ex 49 x.rar

#10

اخي الفاضل

لكي يعمل معك الكود يجب ان يكون في النموذج الرئيسي والنموذج الفرعي

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim ctl As Control
        For Each ctl In Me.Controls

        If ctl.ControlType = acTextBox Or ctl.ControlType = acCommandButton Or ctl.ControlType = acSubform Then

             '{pgup.... pgDn}
            Select Case KeyCode
                Case 33, 34
                KeyCode = 0
            End Select

            '{F1....F12}
            If KeyCode >= 112 And KeyCode <= 123 Then
                KeyCode = 0
            End If

        End If
       Next ctl
End Sub

za-Ex49 X-UP.rar

بالتوفيق

1
#11

الف الف شكر اخت زهرة على الاجابة

بارك الله فيك

مواضيع مشابهة