اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

هل تبحثون عن طريقة مرنة وقوية للتحكم في فتح وإغلاق النماذج في قواعد البيانات ؟
إليكم دالة NavigateForm الحل الأمثل لتبسيط إدارة فتح وإغلاق النماذج أو التبديل بين الفتح/والإغلاق بكفاءة عالية!

ما هي دالة NavigateForm ؟

NavigateForm هي دالة تستخدم في وحدة نمطية عامة (Module) لإدارة النماذج بطريقة احترافية تقوم الدالة بـالآتي :

  • إغلاق النموذج الحالي أو نموذج محدد
  • فتح نموذج آخر بوضع عرض محدد (مثل العرض العادي - الحوار - التصميم - المخفي - . . . .. إلخ)
  • التبديل بإغلاق نموذج وفتح أخر أو فتح نموذج أخر مع الابقاء على النموذج الأب مفتوح
  • تطبيق فلاتر عبر WhereCondition لتحديد السجلات المعروضة
  • تمرير بيانات إضافية عبر OpenArgs لتخصيص سلوك النموذج

الدالة مثالية للمطورين اللي عايزين تنقل سلس بين النماذج مع تحكم دقيق في أوضاع الفتح والإغلاق سواء في تطبيقات بسيطة أو معقدة

مميزات دالة NavigateForm

  1. مرونة عالية: تدعم إغلاق النموذج الحالي أو إغلاق نموذج محدد أو فتح نموذج بوضع معين أو الجمع بين العمليات دي في استدعاء واحد
  2. تعداد مخصص (FormOpenMode): يشمل كل أوضاع فتح النماذج الشائعة:

    - DefaultMode: الوضع الافتراضي
    - NormalMode: العرض العادي (Form View)
    - DesignMode: وضع التصميم (Design View)
    - DatasheetMode: عرض ورقة البيانات (Datasheet View)
    - PreviewMode: معاينة الطباعة (Print Preview)
    - LayoutMode: عرض التخطيط (Layout View)
    - AddMode: إضافة سجل جديد
    - EditMode: تعديل السجلات
    - ReadOnlyMode: القراءة فقط
    - HiddenMode: فتح النموذج في الوضع المخفي
    - DialogMode: فتح النموذج كحوار (يوقف تنفيذ الكود حتى الإغلاق)

  3. معالجة الأخطاء: تتضمن معالجة أخطاء مدمجة للتعامل مع حالات زي:

    - أسماء نماذج غير موجودة
    - محاولة إغلاق نموذج غير مفتوح
    - أخطاء تشغيل غير متوقعة

  4. التعامل مع الإغلاق اليدوي: الدالة بتتعامل بذكاء مع إغلاق النماذج يدويًا (مثل ضغط "X" في النافذة) وبتضمن إمكانية إعادة فتح النموذج بدون مشاكل

  5. منع الاستدعاءات المتكررة: بتمنع فتح النموذج مرتين بنفس المعاملات لو كان مفتوح بالفعل، مع إعادة تعيين السجل بعد كل عملية

  6. توثيق احترافي: الكود مرفق بتوثيق مفصل يشرح المعاملات و  الأوضاع و  وأمثلة الاستدعاء

  7. سهولة التكامل: يمكن استدعاؤها من أحداث النماذج (مثل أزرار OnClick) أو ماكرو أو كود VBA آخر

  8. دعم الفلاتر والبيانات الإضافية: بتسمح بتطبيق فلاتر عبر WhereCondition وتمرير بيانات مخصصة عبر OpenArgs

الكود

  • الكود متاح في وحدة نمطية عامة (basNavigateForm)، ويتضمن:
  • تعداد FormOpenMode لتحديد أوضاع الفتح
  • دالة IsFormPresent للتحقق من وجود النموذج
  • دالة NavigateForm لإدارة فتح وإغلاق النماذج
     
Option Compare Database
Option Explicit

' متغير عام للتحكم في طباعة رسائل التصحيح
Public DebugPrintEnabled As Boolean

' تعداد لتحديد أوضاع فتح النموذج
Public Enum FormOpenMode
    DefaultMode = 0      ' الوضع الافتراضي (يفتح النموذج بإعدادات Access الافتراضية)
    NormalMode = 1       ' العرض العادي (Form View)
    DesignMode = 2       ' وضع التصميم (Design View)
    DatasheetMode = 3    ' عرض ورقة البيانات (Datasheet View)
    PreviewMode = 4      ' عرض معاينة الطباعة (Print Preview)
    LayoutMode = 5       ' عرض التخطيط (Layout View)
    AddMode = 6          ' وضع إضافة سجل جديد
    EditMode = 7         ' وضع تعديل السجلات
    ReadOnlyMode = 8     ' وضع القراءة فقط
    HiddenMode = 9       ' الوضع المخفي (Hidden)
    DialogMode = 10      ' وضع الحوار (Dialog)
End Enum

' =======================================================================
' الدالة: التحقق من وجود نموذج في قاعدة البيانات
' الوصف: ترجع True إذا كان النموذج موجودًا في قاعدة البيانات، وFalse إذا لم يكن موجودًا
' المعاملات: formName (String) - اسم النموذج المراد التحقق منه
'
' المؤلف: [ابو جودي - منتديات أوفيسنا]
' تاريخ الإنشاء: 24 مايو 2025
' الإصدار: 2.1
' =======================================================================
Public Function IsFormPresent(formName As String) As Boolean
    On Error Resume Next
    Dim formObj As Object
    Set formObj = CurrentProject.AllForms(formName)
    IsFormPresent = Not (formObj Is Nothing)
    
    ' طباعة نتيجة التحقق إذا كانت الطباعة مفعلة
    If DebugPrintEnabled Then
        Debug.Print "IsFormPresent: التحقق من النموذج '" & formName & "': " & IsFormPresent
    End If
    
    Set formObj = Nothing
    On Error GoTo 0
End Function

' =======================================================================
' NavigateForm
'
' وصف:
'   دالة عامة للتحكم في فتح وإغلاق نماذج Microsoft Access. تتيح إغلاق
'   النموذج الحالي أو نموذج محدد، وفتح نموذج آخر بوضع محدد مع إمكانية
'   تمرير بيانات إضافية عبر OpenArgs وتطبيق فلتر عبر WhereCondition.
'   إذا كان النموذج المراد فتحه مفتوحًا بالفعل، يتم إغلاقه وإعادة فتحه
'   بالوضع المحدد مع الحفاظ على OpenArgs وWhereCondition.
'
' المعاملات:
'   - formToClose (اختياري، String): اسم النموذج المراد إغلاقه.
'   - formToOpen (اختياري، String): اسم النموذج المراد فتحه.
'   - openMode (اختياري، FormOpenMode): وضع فتح النموذج.
'   - openArgs (اختياري، Variant): بيانات إضافية لتمريرها إلى النموذج المفتوح.
'   - WhereCondition (اختياري، String): شرط فلترة لتحديد السجلات المعروضة.
'
' القيمة المرجعة:
'   - Boolean: True إذا نجحت العملية، False إذا حدث خطأ.
'
' أمثلة:
'   Call NavigateForm ' إغلاق النموذج الحالي
'   Call NavigateForm("Form1") ' إغلاق Form1
'   Call NavigateForm("", "Form2", DialogMode) ' فتح Form2 كحوار
'   Call NavigateForm("Form1", "Form2", AddMode) ' إغلاق Form1 وفتح Form2 لإضافة سجل
'   Call NavigateForm("", "Form2", NormalMode, "CustomerID=123", "ID=123") ' فتح Form2 مع فلتر
'   Call NavigateForm("Form1", "Form2", DialogMode, "Source=MainForm") ' إغلاق Form1 وفتح Form2 كحوار
'   Call NavigateForm("", "Form1", DialogMode, , "ID=456") ' إغلاق Form1 وإعادة فتحه كحوار مع فلتر
'
' ملاحظات:
'   - تأكد من وجود النماذج المحددة في قاعدة البيانات.
'   - وضع DialogMode يوقف تنفيذ الكود حتى إغلاق النموذج.
'   - وضع DesignMode قد يكون مقيدًا في قواعد البيانات المحمية.
'   - استخدم المتغير العام DebugPrintEnabled لتفعيل طباعة رسائل التصحيح أثناء التجربة.
'   - OpenArgs يمكن استخدامه في حدث OnLoad أو OnActivate للنموذج لمعالجة البيانات الممررة.
'   - يمكن استدعاء الدالة من ماكرو باستخدام RunCode: NavigateForm()
'   - إذا كان النموذج مفتوحًا، سيتم إغلاقه وإعادة فتحه بالوضع المحدد.
'   - WhereCondition يتم تطبيقه عند فتح النموذج.
'   - يتم منع الاستدعاءات المتكررة بنفس المعاملات فقط إذا كان النموذج مفتوحًا.
'   - يتم إعادة تعيين سجل الاستدعاء بعد نجاح أو فشل العملية.
'
' المؤلف: [ابو جودي - منتديات أوفيسنا]
' تاريخ الإنشاء: 24 مايو 2025
' الإصدار: 2.1
' =======================================================================
Public Function NavigateForm(Optional ByVal formToClose As String = "", _
                            Optional ByVal formToOpen As String = "", _
                            Optional ByVal openMode As FormOpenMode = DefaultMode, _
                            Optional ByVal openArgs As Variant = Null, _
                            Optional ByVal WhereCondition As String = "") As Boolean
    On Error GoTo ErrHandler
    
    ' متغير ثابت لتتبع آخر استدعاء
    Static lastCall As String
    Dim currentCall As String
    currentCall = formToClose & "|" & formToOpen & "|" & openMode & "|" & IIf(IsNull(openArgs), "Null", openArgs) & "|" & WhereCondition
    
    ' التحقق من التكرار: نتجاهل فقط إذا كان النموذج مفتوحًا ونفس المعاملات
    If currentCall = lastCall And formToOpen <> "" Then
        If IsFormPresent(formToOpen) And CurrentProject.AllForms(formToOpen).IsLoaded Then
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: تجاهل استدعاء متكرر بنفس المعاملات: " & currentCall
            End If
            NavigateForm = True
            Exit Function
        End If
    End If
    
    ' تحديث lastCall
    lastCall = currentCall
    
    ' افتراض النجاح
    NavigateForm = True
    
    ' طباعة المعاملات عند دخول الدالة
    If DebugPrintEnabled Then
        Debug.Print "NavigateForm: استدعاء الدالة مع المعاملات - formToClose: '" & formToClose & "', formToOpen: '" & formToOpen & "', openMode: " & openMode & ", openArgs: " & IIf(IsNull(openArgs), "Null", openArgs) & ", WhereCondition: '" & WhereCondition & "'"
    End If
    
    ' إذا لم يتم تمرير أي معاملات، أغلق النموذج الحالي
    If formToClose = "" And formToOpen = "" Then
        If Not Screen.ActiveForm Is Nothing Then
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: إغلاق النموذج الحالي '" & Screen.ActiveForm.Name & "'"
            End If
            DoCmd.Close acForm, Screen.ActiveForm.Name, acSaveNo
            ' إعادة تعيين lastCall بعد الإغلاق
            lastCall = ""
        Else
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: لا يوجد نموذج حالي مفتوح"
            End If
        End If
        Exit Function
    End If
    
    ' التحقق إذا تم تمرير اسم نموذج للإغلاق
    If formToClose <> "" Then
        If IsFormPresent(formToClose) Then
            If CurrentProject.AllForms(formToClose).IsLoaded Then
                If DebugPrintEnabled Then
                    Debug.Print "NavigateForm: إغلاق النموذج '" & formToClose & "'"
                End If
                DoCmd.Close acForm, formToClose, acSaveNo
                ' إعادة تعيين lastCall بعد الإغلاق
                lastCall = ""
            Else
                If DebugPrintEnabled Then
                    Debug.Print "NavigateForm: النموذج '" & formToClose & "' غير مفتوح"
                End If
            End If
        Else
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: النموذج '" & formToClose & "' غير موجود"
            End If
            MsgBox "النموذج '" & formToClose & "' غير موجود في قاعدة البيانات.", vbExclamation, "خطأ"
            NavigateForm = False
            ' إعادة تعيين lastCall بعد الفشل
            lastCall = ""
            Exit Function
        End If
    End If
    
    ' التحقق إذا تم تمرير اسم نموذج للفتح
    If formToOpen <> "" Then
        If IsFormPresent(formToOpen) Then
            ' إذا كان النموذج مفتوحًا بالفعل، أغلقه
            If CurrentProject.AllForms(formToOpen).IsLoaded Then
                If DebugPrintEnabled Then
                    Debug.Print "NavigateForm: النموذج '" & formToOpen & "' مفتوح بالفعل، سيتم إغلاقه"
                End If
                DoCmd.Close acForm, formToOpen, acSaveNo
            End If
            
            ' فتح النموذج بالوضع المحدد
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: فتح النموذج '" & formToOpen & "' بوضع " & openMode & IIf(IsNull(openArgs), "", ", openArgs: " & openArgs) & IIf(WhereCondition = "", "", ", WhereCondition: " & WhereCondition)
            End If
            Select Case openMode
                Case NormalMode
                    DoCmd.OpenForm formToOpen, acNormal, , WhereCondition, , , openArgs
                Case DesignMode
                    DoCmd.OpenForm formToOpen, acDesign, , WhereCondition, , , openArgs
                Case DatasheetMode
                    DoCmd.OpenForm formToOpen, acFormDS, , WhereCondition, , , openArgs
                Case PreviewMode
                    DoCmd.OpenForm formToOpen, acPreview, , WhereCondition, , , openArgs
                Case LayoutMode
                    DoCmd.OpenForm formToOpen, acLayout, , WhereCondition, , , openArgs
                Case AddMode
                    DoCmd.OpenForm formToOpen, acNormal, , WhereCondition, acFormAdd, , openArgs
                Case EditMode
                    DoCmd.OpenForm formToOpen, acNormal, , WhereCondition, acFormEdit, , openArgs
                Case ReadOnlyMode
                    DoCmd.OpenForm formToOpen, acNormal, , WhereCondition, acFormReadOnly, , openArgs
                Case HiddenMode
                    DoCmd.OpenForm formToOpen, acNormal, , WhereCondition, , acHidden, openArgs
                Case DialogMode
                    DoCmd.OpenForm formToOpen, , , WhereCondition, , acDialog, openArgs
                Case Else
                    DoCmd.OpenForm formToOpen, , , WhereCondition, , , openArgs
            End Select
            ' إعادة تعيين lastCall بعد فتح النموذج
            lastCall = ""
        Else
            If DebugPrintEnabled Then
                Debug.Print "NavigateForm: النموذج '" & formToOpen & "' غير موجود"
            End If
            MsgBox "النموذج '" & formToOpen & "' غير موجود في قاعدة البيانات.", vbExclamation, "خطأ"
            NavigateForm = False
            ' إعادة تعيين lastCall بعد الفشل
            lastCall = ""
            Exit Function
        End If
    End If
    
    Exit Function

ErrHandler:
    If DebugPrintEnabled Then
        Debug.Print "NavigateForm: حدث خطأ: " & Err.Description
    End If
    MsgBox "حدث خطأ: " & Err.Description, vbExclamation, "خطأ"
    NavigateForm = False
    ' إعادة تعيين lastCall بعد الخطأ
    lastCall = ""
End Function

طريقة الاستخدام

  1. إنشاء الوحدة النمطية:
    • افتح محرر VBA في (Alt + F11)
    • أنشئ وحدة نمطية جديدة (Insert > Module)
    • انسخ الكود أعلاه والصقه في الوحدة
    • احفظ الوحدة النمطية باسم : basNavigateForm
  2. استدعاء الدالة:
    • يمكن استدعاء NavigateForm من أحداث النماذج (مثل OnClick لزر) أو  ماكرو  أو كود VBA آخر
       
    • أمثلة الاستدعاء:
       
      ' إغلاق النموذج الحالي
      Call NavigateForm
      
      ' إغلاق نموذج محدد
      Call NavigateForm("Form1")
      
      ' فتح نموذج في وضع الحوار
      Call NavigateForm("", "Form2", DialogMode)
      
      ' إغلاق Form1 وفتح Form2 في وضع إضافة سجل
      Call NavigateForm("Form1", "Form2", AddMode)
      
      ' فتح نموذج مع فلتر
      Call NavigateForm("", "Form2", NormalMode, , "CustomerID=123")
      
      ' فتح نموذج مع OpenArgs
      Call NavigateForm("", "Form2", DialogMode, "Source=MainForm")
      
      ' فتح نموذج مخفي
      Call NavigateForm("", "Form2", HiddenMode)
      
      ' فتح نموذج في وضع التصميم
      Call NavigateForm("", "Form2", DesignMode)
      
      ' فتح نموذج في عرض ورقة البيانات
      Call NavigateForm("", "Form2", DatasheetMode)

       

وأخيـــــرا مرفق بسيط للتجربة

 

NavigateForm (V2.1).accdb

  • Like 3
  • Thanks 1
قام بنشر

يسرني ان يكون ردي هو الاول على الموضوع

عمل جميل احترافي .. يختصر على المطور الكثير

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

يتبادر الى الذهن سؤال ..

هل سيتم دمج التقارير _على الأقل _ ضمن هذه الدالة؟ بكذا يمكن ننسى دوال اكسس فعلا

  • Haha 1
قام بنشر
منذ ساعه, ابوخليل said:

يسرني ان يكون ردي هو الاول على الموضوع

عمل جميل احترافي .. يختصر على المطور الكثير

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

اولا لى عظيم الشرف ان تكون اول تجربه ومشاركة لاستاذى الجليل و معلمى القدير و والدى الحبيب الاستاذ @ابوخليل 🌹

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

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

ولكن بعد ذلك قلت لاجهل الكود اكثر شكوليه ومرونة ليتم التعامل معه من خلال البراميترز وبقدر الامكان حاولت ان يكون اسلوب الاستظعاء سهل ومرن جدا جدا

وبعد ذلك خطر على بالى اضاافة شروط الفتح و openings قلت فى نفسيى ولما لا اوسع الكوظ لتكون ظاله واحدة وتلبى العديد من الخدمات لتشمل معظم الرغبات

 

وطبعا لن ننسي دوال الاكسس اصلا هى اساس الكود والافكار ولكن تمت تمت برمجة دالة واحدة شاملة لعدة وظائف وخدمات

بمناسبة التقارير فكرت فيها برضو 

بس فعلا تعبت ومش قادر فى الوقت الحالى 

لكن ان شاء الله هى فكرة فى البال والخاطر

الله المستعان

قام بنشر

ما شاء الله تبارك الله ... 😊🌹🌟
تحفة فنية نزين بيها المكتبة العامرة .. من واحد تحفة 😁👌🌷

2 ساعات مضت, ابو جودي said:
  • التبديل بإغلاق نموذج وفتح أخر أو فتح نموذج أخر مع الابقاء على النموذج الأب مفتوح

الميزة هذي إنت ذاكرها من ضمن المميزات 😎

  • Thanks 1
قام بنشر
20 دقائق مضت, jjafferr said:

الافكار الجديدة دائما تخلينا نفكر خارج الصندوق، شكرا جزيلا اخوي ابو جودي 🙂

استاذى الجليل و معلمى القدير و والدى الحبيب الاستاذ  @jjafferr :fff:

كل الفضل لكم ولأساتذتي العظماء بعد رب العزة سبحانه وتعالي انتم الضياء الذى يضئ ظلمات جهلنا والنجوم التي بها نهتدى  

جزاكم الله خيـــرا  :fff:

قام بنشر
16 دقائق مضت, Moosak said:

من واحد تحفة 😁

مش مرتاح لك مش عارف ليه حاسس ان واحد تحفة دي بوصلة تتجه نحو التكه يا اللي فاضلة على أخر السكة :jump:

بس ما علينا هأعمل حالى مش شايف :eek2::rol:
 

2 ساعات مضت, ابو جودي said:
  • مرونة عالية: تدعم إغلاق النموذج الحالي أو إغلاق نموذج محدد أو فتح نموذج بوضع معين أو الجمع بين العمليات دي في استدعاء واحد

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

  • Haha 1
قام بنشر
4 دقائق مضت, ابو جودي said:

مش مرتاح لك مش عارف ليه !!

علشان فاضل ساعة على موعد الدوا بتاع الـ.................. 😂😂

6 دقائق مضت, ابو جودي said:

السطر هاد اجمالا يعنى كل المميزات والخدمات التي يقدمها الكود

أنتبهت لاحقا أنك ذاكرها بس مش حاطها من ضمن الأمثلة 😎

يا تحفة 😁👊

  • Haha 1
قام بنشر

ما شاء الله تبارك الله !!! :clapping:

ايه التحفة الجميلة دي :wub:

 

أداة رائعة بالفعل ومهنية في تنظيم التنقل بين النماذج ، وأعجبتني عدة مميزات فيها :-

التصميم المتكامل : التعداد FormOpenMode شامل ويغطي جميع حالات الفتح تقريباً ، مما يجعل الأداء مرناً وقابلاً للتوسعة .

وطبعاً التحكم الدقيق من خلال دعم WhereCondition و OpenArgs يضيف طبقة احترافية للتواصل بين النماذج .

وهنا تحفة فنية عجبتني كمان وهي منع التكرار من خلال lastCall فكرة ذكية لتجنب إهدار الموارد .

 

بس سؤال خطر على بالي ، وأكيد لم يخف عنك يا تحفتنا :wink2: 

هل يمكن إضافة خاصية فتح نموذج كـ "Popup" (نافذة منبثقة) لوضع acWindowNormal مع إمكانية التمرير فوق النماذج الأخرى .

 

 

جزاك الله خيراً على هذا المجهود ، وجعلها في ميزان حسناتك  Like.png.ca4dbd3b7b450d2b1a051a679142599e.png

  • Haha 1
قام بنشر
11 دقائق مضت, Foksh said:

هل يمكن إضافة خاصية فتح نموذج كـ "Popup" (نافذة منبثقة) لوضع acWindowNormal مع إمكانية التمرير فوق النماذج الأخرى .

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

اللى قلته سابقا ده السيناريو النظرى والمحتوم ولا سبيل أو طريق سواه لتحقيق مرادك ولكن هناك عدة تساؤلات يجب طرحها

هل لو القاعدة مأمنه يعمل ؟
هل لو الاطارات مخفيه يعمل ؟
هل لو تم تشفير القاعده الى Accde يعمل ؟

الله اعلم لذلك ابتعدت عنها تماما

قام بنشر
5 دقائق مضت, ابو جودي said:

الله اعلم لذلك ابتعدت عنها تماما

اممممم ، جميل

يعني أحسن شيء و الأفضل هو ، أن يتم :-

  1. تصميم النماذج المراد استخدامها كـ Popup مسبقاً بهذه الخصائص .
  2. استخدام معلمة في OpenArgs لتحديد ما إذا كان النموذج سيفتح كـ Popup أو لا ..
  3. في حدث OnLoad للنموذج ، التحقق من OpenArgs وتعديل السلوك حسب الحاجة ( بدون تغيير الخصائص الأساسية ) .

أعتقد هذا الحل يتجنب مشاكل الأمان ، وأيضاً يوفر مرونة معقولة ( نسبياً إلى حد ما 😅 ) دون الحاجة لتعديل التصميم أثناء التشغيل .

قام بنشر
45 دقائق مضت, Foksh said:

وأكيد لم يخف عنك يا تحفتنا :wink2:

صف جمب أخوك @Moosak تانى هأعمل حالى مش شايف :eek2::rol:
الحمد لله ان ما حد فاهم 
:jump:

26 دقائق مضت, Foksh said:
  • تصميم النماذج المراد استخدامها كـ Popup مسبقاً بهذه الخصائص .

نعم انا افضل ذلك

26 دقائق مضت, Foksh said:
  • استخدام معلمة في OpenArgs لتحديد ما إذا كان النموذج سيفتح كـ Popup أو لا ..

لا علاقه لها بالخصائص
علشان تفهم المقصود منها روح للنموذج : FormA

اعتبر انك تريد فتح نموذج 
ثم فى مربع النص اللى عنوانه على النموذج : OpenArgs Value 
اكتب فيه التالى : Foksh
ثم اضغط زر الامر : بعنوان  Open Form ( B ) DialogMode

وانظر الى الى النموذج FormB
انظر بعد الفتح ما سوف يتم تمريره الى نفس مربع النص فى ها النموذج



اعد نفس الخطوات مع تغيير السطر : NavigateForm "", "FormB", DialogMode, strOpenArgsValue
لزر الامر : بعنوان Open Form ( B ) DialogMode والموجود فى النموذج FormA
الى : NavigateForm "", "FormB", , strOpenArgsValue

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

فى كلا الحالتان لا يوجد تغيير فى خصائص النموذج
ولكن فى الحاله الاولى سلوك النموذج ديلوج فى انتظار بينات لاتمام العمليات فقط لا غير هذا هو المقصود بالسلوك 

26 دقائق مضت, Foksh said:

في حدث OnLoad للنموذج ، التحقق من OpenArgs 

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

  • Haha 1
قام بنشر
52 دقائق مضت, Foksh said:

هل يمكن إضافة خاصية فتح نموذج كـ "Popup" (نافذة منبثقة) لوضع acWindowNormal مع إمكانية التمرير فوق النماذج الأخرى .

 

وردا على سؤالك ده 

الطريقة موجوده هنا لو محتاجها

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information