يمكن الوصول إلى الكود الموجود في Main() أو لا يمكن الوصول إليه اعتمادًا على فتح نموذج آخر

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

  •  20-08-2019
  •  | 
  •  

سؤال

لدي بعض تطبيقات كمبيوتر الجيب وأواجه مشكلة خطيرة معها موضحة هنا: https://stackoverflow.com/questions/472598 .أثناء البحث عن حل، جربت بعض التعليمات البرمجية الغبية جدًا في Main():

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

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

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

ومن ثم العودة منه إلى النافذة الأولية:

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

وأغلق التطبيق الأولي بنفس طريقة المرة الأولى، ولم يتم الوصول مطلقًا إلى رمز Apllication.exit() ولدي انطباع بأن التطبيق ليس مغلقًا حقًا (لا أستطيع فتحه مرة أخرى).آسف إذا كان الوصف معقدا

يحرر:السؤال هو - أي أفكار لماذا تتصرف بشكل مختلف؟

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

المحلول

وnew Tasks() في Main() ليس نفس الكائن مع Tasks tasksWindow = new Tasks();

وأنت حصلت على 2 كائنات من المهام، لذلك يغلق الثانية، الأولى هي لا تزال موجودة ويموت أبدا. تحتاج إلى تمرير إلى QuestionnairesWindow مرجع Tasks الحالي.

ويمكنك أن تفعل ذلك مع منشئ QuestionnairesWindow إضافية:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

وباستخدام:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

نصائح أخرى

يبدو أن هذا السطر هو المشكلة:

Tasks tasksWindow = new Tasks();

إذا فهمت التعليمات البرمجية الخاصة بك بشكل صحيح، في backButton_Click، فأنت تقوم بإنشاء ملف جديد مثيل نموذج المهام الخاص بك، بدلاً من إظهار النموذج الذي قمت بإخفائه في الأصل.وهذا يعني أن التطبيق لا ينتهي أبدًا، لأنه لا تزال هناك نافذة واحدة مفتوحة، ولكنها مخفية.

ما تريد القيام به على الأرجح هو تمرير مرجع نموذج المهام إلى نموذج نافذة الاستبيانات.

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

تحتاج إما إلى إضافة طريقة عامة/داخلية في نافذة الاستبيانات الخاصة بك حيث تقوم بتعيين نموذج المهام الذي يتسبب في فتح نافذة الاستبيانات.يمكنك استدعاء هذه الطريقة في questButton_Click باستخدام ملف هذا مرجع قبل استدعاء this.Hide().سيتم تخزين هذا المرجع في متغير خاص داخل نافذة الاستبيانات.

ثم في backButton_Click، يمكنك استخدام هذا المتغير الخاص، لاستدعاء الأسلوب .Show()، لإظهار النموذج الأصلي.

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