ErrorProvider يعرض خطأ في استخدام زر إغلاق Windows (x)
-
21-09-2019 - |
سؤال
هل هناك أي طريقة لإيقاف موفر الخطأ الملعون عندما أحاول إغلاق النموذج باستخدام زر إغلاق 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