تعطيل ALT+F4 ولكن السماح بإغلاق النموذج بواسطة رمز ، أقرب. Userclosing لا يساعد

StackOverflow https://stackoverflow.com/questions/2643712

سؤال

أريد أن النموذج لن يغلق بالقيام البديل + F4 لكن اذا Application.Exit() أو this.Close يسمى من نفس النموذج ، يجب أن تكون مغلقة.

حاولت CloseReason.UserClosing ولكن لا يزال لا مساعدة.

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

المحلول

إذا كنت بحاجة إلى التصفية البديل + F4 الحدث فقط (ترك النقر فوق مربع الإغلاق ، this.Close() و Application.Exit() أن أتصرف كالمعتاد) ثم يمكنني أن أقترح ما يلي:

  1. تعيين النموذج KeyPreviewخاصية ل true;
  2. نموذج السلك FormClosing و KeyDown الأحداث:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_altF4Pressed)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.Cancel = true;
            _altF4Pressed = false;
        }
    }
    
    private bool _altF4Pressed;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Alt && e.KeyCode == Keys.F4)
            _altF4Pressed = true;
    }
    

نصائح أخرى

من السهل جدًا القيام بذلك عن طريق المجموعة CropressKeypress خاصية إلى صواب form_keydown EventHandler على النحو التالي.

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

باستخدام هذا ، يمكنك أيضًا إغلاق النموذج النشط الخاص بك عن طريق تعيين خاصية CropressKeypress إلى False على نفس EventHandller أو أي طريقة أخرى.

Capture Alt+F4 Hotkey عن طريق تعيين خاصية KeypReview الخاصة بـ Form إلى طريقة OnProcessCmDkey بشكل صحيح.

كيف استخدمت أقرباء؟

انظر نموذج رمز هنا:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

تحتاج إلى تعيين خاصية إلغاء كائن FormClosingEventArgs الذي تم تمريره لإيقاف إغلاق النموذج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top