سؤال

هل هناك أي طريقة لإيقاف موفر الخطأ الملعون عندما أحاول إغلاق النموذج باستخدام زر إغلاق Windows (x). إنه يطلق التحقق من الصحة ويتعين على المستخدم ملء جميع الحقول قبل أن يتمكن من إغلاق النموذج .. ستكون هذه مشكلة قابلية الاستخدام لأن الكثيرين يميلون إلى إغلاق النموذج باستخدام زر (x).

لقد وضعت زرًا للإلغاء مع الأسباب التي تؤدي إلى صحة الخاطئة ، كما أنها تطلق التحقق من الصحة.

لقد وجدت شخصًا يقول أنه إذا كنت تستخدم Form.Close () يتم تشغيل عمليات التحقق من الوظائف ... كيف يمكنني تجاوز هذه الميزة المزعجة.

لدي mdi sturucture وأظهر النموذج باستخدام

 CreateExam.MdiParent = Me
        CreateExam.Show()

على MDI الوالد Menuitem انقر

ولدي ذلك بمثابة التحقق من صحة

Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
        If String.IsNullOrEmpty(TextBox1.Text) Then
            Err.SetError(TextBox1, "required")
            e.Cancel = True
        End If
        If TextBox1.Text.Contains("'") Then
            Err.SetError(TextBox1, "Invalid Char")
            e.Cancel = True
        End If
    End Sub

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

هل كانت مفيدة؟

المحلول

تمنع طريقة ValidateChildren () النموذج من الإغلاق. الصق هذا الرمز في النموذج الخاص بك لإصلاح ذلك:

protected override void OnFormClosing(FormClosingEventArgs e) {
  e.Cancel = false;
}

نصائح أخرى

هذا إصلاح بسيط للغاية في النموذج الخاص بك Closing الحدث ، قم بتعيين علامة للإشارة إلى ترك النموذج ، على سبيل المثال blnLeave, ، عندما يتم تحميل النموذج ، اضبط العلم على False, ، عندما Closing يتم تشغيل الحدث ، وضبط ذلك True ضمن معالج الحدث هذا ، فإن التغيير على النحو التالي سيكون

Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

        If (blnLeave) Then
            e.Cancel = False;
            Return
        End If

        If String.IsNullOrEmpty(TextBox1.Text) Then
            Err.SetError(TextBox1, "required")
            e.Cancel = True
        End If
        If TextBox1.Text.Contains("'") Then
            Err.SetError(TextBox1, "Invalid Char")
            e.Cancel = True
        End If
    End Sub

تعديل: عدل هذا الإجابة لإدراجها وفقًا لتعليقات OP. اقتراحي هو التعامل مع الحدث المغلق للنموذج كما هو موضح

    Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        blnLeave = True
    End Sub

والتعامل معه هنا في تجاوز إجراء نافذة النموذج كما هو موضح هنا ....

    Private Const SC_CLOSE As Integer = &HF060
    Private Const WM_MENUSELECT As Integer = &H11F
    Private Function LoWord(ByVal Num As Integer) As Integer
        LoWord = Num & &HFFFF
    End Function
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_MENUSELECT Then
            If LoWord(m.WParam.ToInt32()) = SC_CLOSE Then
                ' Handle the closing via system Menu
                blnLeave = True
            End If
        End If
        MyBase.WndProc(m)
    End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top