मैं C # में एक विंडो ऑनस्क्रीन कैसे केंद्र करूं?


129

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


मुझे लगता है कि आप जीत रूपों का उपयोग कर रहे हैं?
एंड्रयू ऑरसिच

8
Form.CenterToScreen का उपयोग न करें। देखें इस पोस्ट जानकारी के लिए।
आर्टेमिक्स

फॉर्म क्लास के कंस्ट्रक्टर में CenterToScreen () विधि का उपयोग करें।
वेबमैक

जवाबों:


202

Form.CenterToScreen () विधि का उपयोग करें ।


7
सिस्टम पर दो मॉनिटर के साथ फॉर्म एक पर केंद्रित होगा जिसमें वर्तमान में कर्सर है। तो, प्रपत्र अचानक अन्य मॉनिटर पर कूद सकता है। यहाँ पोस्ट देखें ।
आर्टेमिक्स

6
आपके द्वारा संदर्भित दस्तावेज़ कहते हैं, "इसे अपने कोड से सीधे कॉल न करें।" हालांकि यह क्यों नहीं कहता।
स्टीफन टर्नर

4
दस्तावेज़ीकरण कहता है कि इसे केंद्र में लाने के लिए फ़ॉर्म की प्रारंभ संपत्ति का उपयोग करें। इसने मेरे लिए काम किया।
जॉन क्रॉच

यह काम करता है, मुझे बस इसे तुरंत करना था: यह। CenterToScreen ();
लाकी पोलिटिस

मैं यह भी जानना चाहूंगा कि प्रलेखन क्यों कहता है "इसे अपने कोड से सीधे कॉल न करें।"
पीट

153
  1. संपत्ति विंडो का उपयोग करना

    फॉर्म का चयन करें → प्रॉपर्टी विंडो पर जाएं → "स्टार्ट पोजीशन" चुनें → आपको जो भी जगह चाहिए उसे चुनें।

    "

  2. प्रोग्राम के रूप में

    Form form1 = new Form(); form1.StartPosition = FormStartPosition.CenterScreen; form1.ShowDialog();

    नोट: सीधे अपने कोड से Form.CenterToScreen () को कॉल न करें। पढ़ें यहाँ


34

एक पंक्ति:

this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
                          (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);

इस शो के केंद्र होने का एक अच्छा तरीका है या तो 'एक्स' या 'y' मैन्युअल। मुझे 'केंद्र स्क्रीन' की आवश्यकता थी, लेकिन केवल 'y' समन्वय के लिए।
atconway

9
Screen.PrimaryScreen क्यों? यदि फॉर्म 'सेकेंडरीस्क्रीन' पर है तो क्या होगा? आपको Screen screen = Screen.FromControl(this);यहां का उपयोग करना चाहिए ।
आर्टेमिक्स

मैं इस आदिम तकनीकों का उपयोग केवल इसलिए करता हूं क्योंकि यह .NET कॉम्पैक्ट फ्रेमवर्क 3.5 पर काम करता है , और यह भी समझाता है कि मैं इसका उपयोग क्यों नहीं करता Screen.FromControl(this)लेकिन इसे रखूं PrimaryScreen। (मैं हार्डवेयर बाधा के तहत एक एप्लिकेशन विकसित कर रहा हूं) :-)
Yeo

यदि आप केवल एक स्क्रीन का उपयोग कर रहे हैं तो यह विधि ठीक है। हालाँकि, यदि आपके पास कई मॉनीटर हैं और बाईं मॉनीटर पर यहाँ एक शॉर्टकट क्लिक करते हैं, तो आप वास्तव में इसे दाईं ओर खोलना नहीं चाहते हैं। StartPosition गुण आपके लिए संभालता है।
ट्रेवर_जी

यह [प्रति मॉनिटर डीपीआई जागरूक] नहीं है।
वीटी।

28

विंडोज फॉर्म में:

this.StartPosition = FormStartPosition.CenterScreen;

WPF में:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

बस आपको इतना ही करना है ...


स्थिति के लिए सर्वश्रेष्ठ उत्तर। मैं स्थिति को सेट नहीं करना चाहता था लेकिन फॉर्म में वापस आने के बाद इसे रीसेट करना होगा। यह पूर्ण है।
कंगारू

16

यदि आप रनटाइम के दौरान अपनी खिड़कियों को नीचे रखना चाहते हैं, तो नीचे दिए गए कोड का उपयोग करें, इसे अपने आवेदन में कॉपी करें:

protected void ReallyCenterToScreen()
{
  Screen screen = Screen.FromControl(this);

  Rectangle workingArea = screen.WorkingArea;
  this.Location = new Point() {
    X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - this.Width) / 2),
    Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - this.Height) / 2)};
}

और अंत में इसे प्राप्त करने के लिए उपरोक्त विधि को कॉल करें:

ReallyCenterToScreen();

यह सबसे अच्छा काम करता है क्योंकि यह काम करेगा भले ही आप this.Location = Screen.AllScreens[0].WorkingArea.Location;इससे पहले चलाएं , अन्य उत्तर कई स्क्रीन का उपयोग करते समय ऐप को हिलाने के ऐसे मामले में काम नहीं करते हैं।
TK-421

8

 रनटाइम में एक फॉर्म को केंद्रित करना। फॉर्म की

संपत्ति का पालन करें:
   -> प्रारंभ करें: सेंटरस्क्रीन
   -> विंडोस्टेट: सामान्य

यह रनटाइम पर फॉर्म को केंद्र करेगा लेकिन यदि फॉर्म का आकार बड़ा है तो उम्मीद की जाती है कि दूसरा कदम उठाएं।

2. आरंभिक आकार के बाद कस्टम आकार जोड़ें ();

public Form1()
{
    InitializeComponent();
    this.Size = new Size(800, 600);
}

6
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace centrewindow
{
    public partial class Form1 : Form
    {
        public struct RECT
        {
            public int Left;        // x position of upper-left corner
            public int Top;         // y position of upper-left corner
            public int Right;       // x position of lower-right corner
            public int Bottom;      // y position of lower-right corner
        }

        [DllImport("user32.dll")]
        public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

        [DllImport("user32.dll")]
        public static extern bool GetWindowRect(HandleRef hwnd, out RECT lpRect);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CentreWindow(Handle, GetMonitorDimensions());
        }

        private void CentreWindow(IntPtr handle, Size monitorDimensions)
        {
            RECT rect;
            GetWindowRect(new HandleRef(this, handle), out rect);

            var x1Pos = monitorDimensions.Width/2 - (rect.Right - rect.Left)/2;
            var x2Pos = rect.Right - rect.Left;
            var y1Pos = monitorDimensions.Height/2 - (rect.Bottom - rect.Top)/2;
            var y2Pos = rect.Bottom - rect.Top;

            SetWindowPos(handle, 0, x1Pos, y1Pos, x2Pos, y2Pos, 0);
        }

        private Size GetMonitorDimensions()
        {
            return SystemInformation.PrimaryMonitorSize;
        }
    }
}

किसी भी विंडो को आप संभाल सकते हैं


3

इसे इस्तेमाल करो:

this.CenterToScreen();  // This will take care of the current form

1
-100। " सीधे अपने कोड से CenterToScreen () को कॉल करें। इसके बजाय, StartPosition गुण को केंद्रस्क्रीन पर सेट करें।" msdn.microsoft.com/en-us/library/…
A876

2

फॉर्म की लोकेशन प्रॉपर्टी का इस्तेमाल करें। इसे वांछित शीर्ष बाएं बिंदु पर सेट करें

वांछित x = (Desktop_width - form_witdh) / 2

वांछित y = (Desktop_height - from_height) / 2


1

आप Screen.PrimaryScreen.Boundsप्राथमिक मॉनीटर के आकार को पुनः प्राप्त करने के लिए उपयोग कर सकते हैं (या Screenसभी मॉनीटर को पुनः प्राप्त करने के लिए वस्तु का निरीक्षण कर सकते हैं )। उन लोगों का उपयोग करें, MyForms.Boundsजहां यह पता लगाने के लिए कि आपका फॉर्म कहां रखा गया है।


1

सवाल के लिए पूरी तरह से प्रासंगिक नहीं हो सकता है। लेकिन शायद किसी की मदद कर सकते हैं।

मेरे लिए उपरोक्त कार्य की केंद्र स्क्रीन गैर। कारण यह था कि मैं गतिशील रूप से नियंत्रण जोड़ रहा था। तकनीकी रूप से जब यह केन्द्रित होता है तो नियंत्रण जोड़ने से पहले प्रपत्र के आधार पर यह सही था।

तो यहाँ मेरा समाधान था। (दोनों परिदृश्यों के साथ काम करना चाहिए)

int x = Screen.PrimaryScreen.Bounds.Width - this.PreferredSize.Width;
int y = Screen.PrimaryScreen.Bounds.Height - this.PreferredSize.Height;

this.Location = new Point(x / 2, y / 2);

तो आप ध्यान देंगे कि मैं केवल ऊँचाई / चौड़ाई का उपयोग करने के बजाय "PreferredSize" का उपयोग कर रहा हूं। पसंदीदा आकार नियंत्रणों को जोड़ने के बाद फॉर्म का मान रखेगा। जहां ऊंचाई / चौड़ाई नहीं होगी।

आशा है कि यह किसी की मदद करता है।

चियर्स


0

मल्टी मॉनिटर के मामले में और यदि आप सही मॉनिटर / स्क्रीन पर केंद्र करना पसंद करते हैं तो आप इन लाइनों को आज़माना पसंद कर सकते हैं:

// Save values for future(for example, to center a form on next launch)
int screen_x = Screen.FromControl(Form).WorkingArea.X;
int screen_y = Screen.FromControl(Form).WorkingArea.Y;

// Move it and center using correct screen/monitor
Form.Left = screen_x;
Form.Top = screen_y;
Form.Left += (Screen.FromControl(Form).WorkingArea.Width - Form.Width) / 2;
Form.Top += (Screen.FromControl(Form).WorkingArea.Height - Form.Height) / 2;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.