C# - لماذا لا يغطي تطبيق winform بملء الشاشة شريط المهام دائمًا؟

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

سؤال

أنا أستخدم نظامي التشغيل Windows Vista وC#.net 3.5، ولكن طلبت من صديقي تشغيل البرنامج على نظام التشغيل XP وكان يعاني من نفس المشكلة.

إذن لدي برنامج C# أقوم بتشغيله في الخلفية مع أيقونة في SystemTray.لدي ربط لوحة مفاتيح منخفض المستوى، لذا عندما أضغط على مفتاحين (Ctr+windows في هذه الحالة) فإنه سيسحب النموذج الرئيسي للتطبيق.يتم تعيين النموذج ليكون ملء الشاشة في مفتاح التحرير والسرد، اضغط حتى على المعالج:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

لذلك فهو يعمل بشكل أساسي.عندما أضغط على CTR+Windows يظهر النموذج، بغض النظر عن البرنامج الذي ركزت عليه.لكن في بعض الأحيان، سيستمر ظهور شريط المهام فوق النموذج، وهو ما لا أريده.أريدها أن تكون دائمًا بملء الشاشة عندما أضغط على مجموعة المفاتيح هذه.

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

هل لدى أي شخص أي أفكار كيف يمكنني إصلاح هذا؟

يحرر:مزيد من التفاصيل- أحاول تحقيق نفس التأثير الذي تحدثه متصفح الويب عند وضعه في وضع ملء الشاشة ، أو عند وضع PowerPoint في وضع العرض التقديمي.

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

إذا كانت النافذة الرئيسية في الأعلى، فسوف يتخلف الآخرون عنها عندما أنقر عليها، وهو ما لا أريده إذا كان شريط المهام مخفيًا.

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

المحلول

جرب هذا (أين this هو النموذج الخاص بك):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

سيؤدي ذلك إلى ضبط النموذج على وضع ملء الشاشة، وسيغطي شريط المهام.

نصائح أخرى

لقد قمت بتجربة العديد من الحلول، بعضها يعمل على نظام التشغيل Windows XP وجميعها لا يعمل على نظام التشغيل Windows 7.بعد كل شيء أكتب طريقة بسيطة للقيام بذلك.

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

ترتيب التعليمات البرمجية مهم ولن يعمل إذا قمت بتغيير مكان WindwosState وFormBorderStyle.

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

لقد حل مشكلتي تمامًا.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F11)
        if (FormBorderStyle == FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
        }
        else
        {
            SuspendLayout();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            ResumeLayout();
        }
}

بقدر ما أعرف، يكون شريط المهام إما أعلى النوافذ أو أسفلها بناءً على إعداد "الاحتفاظ بشريط المهام أعلى النوافذ الأخرى".(على الأقل، هذه هي الصياغة في XP.) أفترض أنه يمكنك محاولة معرفة ما إذا كان بإمكانك اكتشاف هذا الإعداد وتبديله إذا لزم الأمر؟

حاول تغيير حجم النموذج وإحضاره إلى مقدمة الترتيب z كما يلي:

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top