سؤال

أنا أتساءل كيف يمكنني فتح النموذج المغلق مرة أخرى باستخدام this.Close().في كل مرة أحاول فتح النموذج المغلق باستخدام Mainmenu.Show()، يؤدي الاستثناء إلى ظهور خطأ "لا يمكن الوصول إلى الكائن الذي تم التخلص منه.اسم الكائن:القائمة الرئيسية".

كيف يمكنني فتحه مرة أخرى؟

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

المحلول

عندما Close يتم استدعاء الطريقة على أ Form لا يمكنك الاتصال بـ Show طريقة لجعل النموذج مرئيًا، لأن موارد النموذج قد تم إصدارها بالفعل والمعروفة أيضًا باسم Disposed.لإخفاء نموذج ثم جعله مرئيًا، استخدم أسلوب Control.Hide.

من MSDN

إذا كنت تريد إعادة فتح نموذج تم إغلاقه، فستحتاج إلى إعادة إنشائه مرة أخرى بنفس الطريقة التي أنشأته بها في البداية:

YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();

نصائح أخرى

أفترض أن لديك نموذجًا رئيسيًا، مما يؤدي إلى إنشاء نموذج فرعي غير مشروط.نظرًا لأنه يمكن إغلاق هذا النموذج الفرعي بشكل مستقل عن النموذج الرئيسي، فمن الممكن أن يكون لديك سيناريوهين:

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

في الأساس، يجب أن يتتبع النموذج الرئيسي عمر النموذج الفرعي، من خلال التعامل معه FormClosed حدث:

class MainForm : Form
{
    private ChildForm _childForm;

    private void CreateOrShow()
    {
        // if the form is not closed, show it
        if (_childForm == null) 
        {
            _childForm = new ChildForm();

            // attach the handler
            _childForm.FormClosed += ChildFormClosed;
        }

        // show it
        _childForm.Show();
    }

    // when the form closes, detach the handler and clear the field
    void ChildFormClosed(object sender, FormClosedEventArgs args)
    {
        // detach the handler
        _childForm.FormClosed -= ChildFormClosed;

        // let GC collect it (and this way we can tell if it's closed)
        _childForm = null;
    }
}

لا يمكنك إظهار نموذج مغلق. يمكنك استدعاء هذا "hide () لإغلاق النموذج. في وقت لاحق يمكنك الاتصال النموذج. شاو ()؛

إما أنه أو تحتاج إلى إنشاء النموذج مرة أخرى.

إضافة صغيرة إلى التعليمات البرمجية الذكية المقدمة أعلاه giveacodicetagpre.

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