मैं WinForms ऐप को फुल स्क्रीन कैसे बनाते हैं


109

मेरे पास एक WinForms ऐप है जिसे मैं फुल स्क्रीन बनाने की कोशिश कर रहा हूं (कुछ ऐसा जो वीएस फुल स्क्रीन मोड में करता है)।

वर्तमान में मैं स्थापित करने हूँ FormBorderStyleकरने के लिए Noneऔर WindowStateकरने के लिए Maximizedजो मुझे एक छोटे से अधिक स्थान मिलता है, लेकिन यह कार्य पट्टी के ऊपर कवर नहीं करता है अगर यह दिख रहा है।

मुझे उस स्थान का उपयोग करने के लिए क्या करने की आवश्यकता है?

बोनस पॉइंट्स के लिए, क्या कुछ ऐसा है जो मैं MenuStripउस जगह को छोड़ने के लिए अपना ऑटोहाइड बनाने के लिए कर सकता हूं ?

जवाबों:


150

आधार प्रश्न के लिए, निम्नलिखित कार्य करेगा (टास्कबार को छिपाते हुए)

private void Form1_Load(object sender, EventArgs e)
{
    this.TopMost = true;
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;
}

लेकिन, दिलचस्प बात यह है कि अगर आप उन आखिरी दो लाइनों को स्वैप करते हैं, जो टास्कबार दिखाई देती हैं। मुझे लगता है कि इन कार्यों के अनुक्रम को गुण विंडो के साथ नियंत्रित करना मुश्किल होगा।


4
आदेश देने का मुद्दा यह है कि यह मेरे लिए पहले क्यों काम नहीं कर रहा था। मैं वास्तव में उस क्रम में गुण सेट कर रहा था, लेकिन जब फार्म पहले से ही सीमा को अधिकतम करने के लिए है कोई भी टास्कबार को कवर करने के लिए विस्तार नहीं करता है। मैंने सीमा को बदलने और फिर अधिकतम करने के रूप में "बहाल" करके काम किया।

3
मेरे पास यह सही क्रम में है और यह काम नहीं करता है। टास्कबार हमेशा दिखाई देता है और ऐप इसके नीचे नहीं है, यह सिर्फ वहां टास्कबार के लिए निशुल्क छोड़ दिया है। (विन 7)
प्रेजा 8

@ Preza8 - ग्रैडी की टिप्पणी पढ़ें, जांचें कि क्या यह आपकी स्थिति पर लागू होता है।
हेंक होल्टरमैन २०

1
मुझे क्षमा करें, मैं लंबे समय से यहां ऑनलाइन नहीं था और मैं भूल गया कि मैंने यह कैसे किया है लेकिन मुझे याद है कि कुछ आदेशों के बाद यादृच्छिक क्रम में मदद मिलती है।
प्रीज़ा 8

नोट: किसी कारण से मुझे प्रॉपर्टीज सेट करनी पड़ी और इसे कोड में रखा गया
जो फिलिप्स

22

एक परीक्षण और सरल समाधान

मैं एसओ और कुछ अन्य साइटों में इस प्रश्न का उत्तर ढूंढ रहा हूं, लेकिन एक ने मुझे एक उत्तर दिया था जो मेरे लिए बहुत जटिल था और कुछ अन्य उत्तर बस सही ढंग से काम नहीं करते हैं, इसलिए बहुत सारे कोड परीक्षण के बाद मैंने इस पहेली को हल किया।

नोट: मैं उपयोग कर रहा हूँ विंडोज 8 और मेरा टास्कबार ऑटो-हाईड मोड पर नहीं है।

मैंने पाया कि किसी भी संशोधन को करने से पहले WindowState को नॉर्मल पर सेट करना, कवर किए गए टास्कबार के साथ त्रुटि को रोक देगा।

कोड

मैंने इस वर्ग को बनाया जिसमें दो विधियाँ हैं, पहला "फुल स्क्रीन मोड" में प्रवेश करता है और दूसरा "फुल स्क्रीन मोड" छोड़ता है। तो आपको बस इस वर्ग का एक ऑब्जेक्ट बनाने और फॉर्म को पास करने की ज़रूरत है जिसे आप एंटरफ़ुलस्क्रीनस्क्रीन मोड या लीफ़फ़ुलस्क्रीन मोड में एक तर्क के रूप में पूर्ण स्क्रीन सेट करना चाहते हैं:

class FullScreen
{
    public void EnterFullScreenMode(Form targetForm)
    {
        targetForm.WindowState = FormWindowState.Normal;
        targetForm.FormBorderStyle = FormBorderStyle.None;
        targetForm.WindowState = FormWindowState.Maximized;
    }

    public void LeaveFullScreenMode(Form targetForm)
    {
        targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        targetForm.WindowState = FormWindowState.Normal;
    }
}

उपयोग उदाहरण

    private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FullScreen fullScreen = new FullScreen();

        if (fullScreenMode == FullScreenMode.No)  // FullScreenMode is an enum
        {
            fullScreen.EnterFullScreenMode(this);
            fullScreenMode = FullScreenMode.Yes;
        }
        else
        {
            fullScreen.LeaveFullScreenMode(this);
            fullScreenMode = FullScreenMode.No;
        }
    }

मैंने एक ही सवाल पर यह जवाब दिया है कि मुझे यकीन नहीं है कि यह डुप्लिकेट है या नहीं। (अन्य प्रश्न से लिंक: टास्कबार के शीर्ष पर पूर्ण स्क्रीन में विंडोज फॉर्म कैसे प्रदर्शित करें? )


2
जिज्ञासा से बाहर, आपके पास एक सच्ची / झूठी स्थिति का वर्णन करने के लिए पूरी दुश्मनी क्यों है?
नाथन रिडले

2
मैंने यह बहुत पहले लिखा था जब मैं केवल कोड लिखने के लिए लोभी था, कृपया मेरे युवा विनम्रता का ध्यान रखें। इसका वास्तव में कोई मतलब नहीं है और मुझे बस बूलियन प्रकार का उपयोग करना चाहिए।
जिगंड

इसने मेरे लिए काम किया और मुझे targetForm.WindowState = FormWindowState.Normal;पूरी स्क्रीन छोड़ने के साथ ही शुरुआत भी करनी पड़ी। उस मामले को संभालने के लिए जहां उपयोगकर्ता अधिकतम विंडो से पूर्ण स्क्रीन जा रहा है।
जिन्न

6

और पुरुष-प्रश्न के लिए, सेट करने का प्रयास करें

MenuStrip1.Parent = Nothing

जब फुलस्क्रीन मोड में होता है, तब उसे गायब हो जाना चाहिए।

और फुलस्क्रीनमोड से बाहर निकलने पर, फिर से menustrip1.parentफॉर्म पर रीसेट करें और फिर से मेनस्ट्रैप सामान्य हो जाएगा।


5

अपने सिस्टम स्क्रीन को फिट करने के लिए आप निम्न कोड का उपयोग कर सकते हैं और टास्क बार दिखाई देता है।

    private void Form1_Load(object sender, EventArgs e)
    {   
        // hide max,min and close button at top right of Window
        this.FormBorderStyle = FormBorderStyle.None;
        // fill the screen
        this.Bounds = Screen.PrimaryScreen.Bounds;
    }

उपयोग करने की आवश्यकता नहीं:

    this.TopMost = true;

वह लाइन alt+tabअन्य एप्लिकेशन पर स्विच करने के लिए हस्तक्षेप करती है। ("TopMost" का अर्थ है कि विंडो अन्य विंडो के शीर्ष पर रहती है, जब तक कि उन्हें "TopMost" के रूप में चिह्नित नहीं किया जाता है।)


4

मैंने हाल ही में एक मेडिएपलेयर एप्लिकेशन बनाया था और यह सुनिश्चित करने के लिए कि टास्कबार छिपाया गया था जब प्रोग्राम फुलस्क्रीन चल रहा था और तब प्रोग्रामबार फुलस्क्रीन में नहीं था या फोकस नहीं था या बाहर नहीं था, तो मैंने एपीआई-कॉल का उपयोग किया।

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer

Sub HideTrayBar()
    Try


        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(tWnd, 0)
        ShowWindow(bWnd, 0)
    Catch ex As Exception
        'Error hiding the taskbar, do what you want here..
    End Try
End Sub
Sub ShowTraybar()
    Try
        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(bWnd, 1)
        ShowWindow(tWnd, 1)
    Catch ex As Exception
    'Error showing the taskbar, do what you want here..     
               End Try


End Sub

6
अगर दो कार्यक्रमों ने ऐसा किया तो क्या होगा? क्या होगा यदि आपका प्रोग्राम टास्कबार को अनहाइड करने का मौका मिलने से पहले क्रैश हो जाए?
Tmdean

@ टमडेन: मेरे मामले में यह कोई समस्या नहीं थी, यह कार्यक्रम मैशाइन पर चल रहा था जो वेटरूम में केवल मेरे कार्यक्रम को स्क्रीन पर चलाने के लिए समर्पित था।
स्टीफन

@ टेडियन: यदि दो कार्यक्रमों के बारे में यह बात मान्य है, तो यह सही नहीं संभाला जा सकता है।
स्टीफन

2

आपको अपनी विंडो को सबसे ऊपर रखने की आवश्यकता है।


1
कोई पाँसा नहीं। यहां तक ​​कि अगर मैं खिड़की को सबसे ऊपर होने के लिए सेट करता हूं तो यह टास्कबार को कवर नहीं करता है।

3
आज़माएँ: सीमाएँ = स्क्रीन.प्रेमरीस्क्रीन। सीमाएँ; codeproject.com/KB/cs/scrframework.aspx में अधिक जानकारी है, जैसे मल्टीमोन के लिए
Tron

1

मुझे नहीं पता कि यह .NET 2.0 पर काम करेगा, लेकिन इसने मुझे .NET 4.5.2 पर काम किया। यहाँ कोड है:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class Your_Form_Name : Form
{
    public Your_Form_Name()
    {
        InitializeComponent();
    }

    // CODE STARTS HERE

    private System.Drawing.Size oldsize = new System.Drawing.Size(300, 300);
    private System.Drawing.Point oldlocation = new System.Drawing.Point(0, 0);
    private System.Windows.Forms.FormWindowState oldstate = System.Windows.Forms.FormWindowState.Normal;
    private System.Windows.Forms.FormBorderStyle oldstyle = System.Windows.Forms.FormBorderStyle.Sizable;
    private bool fullscreen = false;
    /// <summary>
    /// Goes to fullscreen or the old state.
    /// </summary>
    private void UpgradeFullscreen()
    {
        if (!fullscreen)
        {
            oldsize = this.Size;
            oldstate = this.WindowState;
            oldstyle = this.FormBorderStyle;
            oldlocation = this.Location;
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            fullscreen = true;
        }
        else
        {
            this.Location = oldlocation;
            this.WindowState = oldstate;
            this.FormBorderStyle = oldstyle;
            this.Size = oldsize;
            fullscreen = false;
        }
    }

    // CODE ENDS HERE
}

उपयोग:

UpgradeFullscreen(); // Goes to fullscreen
UpgradeFullscreen(); // Goes back to normal state
// You don't need arguments.

सूचना: आप इसे अपने फॉर्म की कक्षा के अंदर रखें (उदाहरण:) partial class Form1 : Form { /* Code goes here */ }या यह काम नहीं करेगा क्योंकि यदि आप इसे किसी भी रूप में नहीं रखते हैं, तो कोड thisएक अपवाद पैदा करेगा।


1

फॉर्म मूव इवेंट में इसे जोड़ें:

private void Frm_Move (object sender, EventArgs e)
{
    Top = 0; Left = 0;
    Size = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
}

1

मैंने ज़िंग्ड आइडिया पर काम किया और इसे सरल बनाया इस्तेमाल ।

मैंने फुलस्क्रीन मोड को चालू करने के लिए मानक F11 कुंजी भी जोड़ा ।

सेट अप

सब कुछ अब फुलस्क्रीन वर्ग में है, इसलिए आपको अपने फॉर्म में चर का एक गुच्छा घोषित करने की आवश्यकता नहीं है। आप अपने फॉर्म के कंस्ट्रक्टर में एक फुलस्क्रीन ऑब्जेक्ट को इंस्टेंटेट करें:

FullScreen fullScreen;

public Form1()
{
    InitializeComponent();
    fullScreen = new FullScreen(this);
}

कृपया ध्यान दें कि जब आप फुलस्क्रीन ऑब्जेक्ट बनाते हैं तो फॉर्म को अधिकतम नहीं किया जाता है।

प्रयोग

आप फुलस्क्रीन मोड को टॉगल करने के लिए बस क्लैसे के किसी एक कार्य का उपयोग करते हैं:

fullScreen.Toggle();

या यदि आपको इसे स्पष्ट रूप से संभालने की आवश्यकता है:

fullScreen.Enter();
fullScreen.Leave();

कोड

using System.Windows.Forms;


class FullScreen
{ 
    Form TargetForm;

    FormWindowState PreviousWindowState;

    public FullScreen(Form targetForm)
    {
        TargetForm = targetForm;
        TargetForm.KeyPreview = true;
        TargetForm.KeyDown += TargetForm_KeyDown;
    }

    private void TargetForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.F11)
        {
            Toggle();
        }
    }

    public void Toggle()
    {
        if (TargetForm.WindowState == FormWindowState.Maximized)
        {
            Leave();
        }
        else
        {
            Enter();
        }
    }
        
    public void Enter()
    {
        if (TargetForm.WindowState != FormWindowState.Maximized)
        {
            PreviousWindowState = TargetForm.WindowState;
            TargetForm.WindowState = FormWindowState.Normal;
            TargetForm.FormBorderStyle = FormBorderStyle.None;
            TargetForm.WindowState = FormWindowState.Maximized;
        }
    }
      
    public void Leave()
    {
        TargetForm.FormBorderStyle = FormBorderStyle.Sizable;
        TargetForm.WindowState = PreviousWindowState;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.