আমি কীভাবে সি # তে একটি উইন্ডো অনস্ক্রিনকে কেন্দ্র করব?


129

আমার বর্তমান উইন্ডোটি কেন্দ্র করার একটি উপায় দরকার। সুতরাং উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী কোনও বোতাম চাপায় তবে আমি উইন্ডোটি অনস্ক্রিনকে কেন্দ্র করে রাখতে চাই। আমি জানি আপনি স্টার্টপজিশন সম্পত্তিটি ব্যবহার করতে পারেন তবে অ্যাপ্লিকেশনটি শুরু হওয়ার পরে আমি অন্যটি ব্যবহার করার কোনও উপায় বের করতে পারি না। সুতরাং আমি কীভাবে পর্দায় ফর্মটি কেন্দ্র করব?


আমি মনে করি আপনি উইন ফর্ম ব্যবহার করছেন?
অ্যান্ড্রু ওরিচ

8
Form.CenterToScreen ব্যবহার করবেন না। বিস্তারিত জানার জন্য এই পোস্টটি দেখুন ।
আর্টেমিক্স

ফর্ম শ্রেণীর নির্মাতায় CenterToScreen () পদ্ধতিটি ব্যবহার করুন।
ওয়েবম্যাক

উত্তর:


202

Form.CenterToScreen () পদ্ধতিটি ব্যবহার করুন ।


7
দুটি মনিটরের সাথে সিস্টেমে ফর্মটি বর্তমানে কার্সারে থাকা একটিতে কেন্দ্রিক হবে। সুতরাং, ফর্মটি হঠাৎ করে অন্য মনিটরে ঝাঁপিয়ে পড়তে পারে। পোস্টটি এখানে দেখুন
আর্টেমিক্স

6
আপনি যে ডকুমেন্টেশনটির উল্লেখ করেছেন তাতে "এটি আপনার কোড থেকে সরাসরি কল করবেন না" বলে। যদিও এটি বলে না doesn't
স্টিফেন টার্নার

4
ডকুমেন্টেশনটি বলে ফর্মের স্টার্টপজেনের সম্পত্তিটিকে কেন্দ্র করে ব্যবহার করুন। এটা আমার জন্য কাজ করেছে।
জন ক্রয়েচ

এটি কাজ করে, আমাকে কেবল এটি ইনস্ট্যানিয়েট করতে হয়েছিল: this.CenterToScreen ();
লাকি পোলাইটিস

আমিও জানতে চাই যে ডকুমেন্টেশনটি কেন "আপনার কোড থেকে সরাসরি এটি কল করবেন না"।
পিট

153
  1. সম্পত্তি উইন্ডো ব্যবহার করে

    ফর্ম নির্বাচন করুন property সম্পত্তি উইন্ডোতে যান → "শুরু অবস্থান" নির্বাচন করুন you আপনি যে জায়গাটি চান তা নির্বাচন করুন।

    "

  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' নিজে। আমার 'সেন্টার স্ক্রিন' দরকার, তবে কেবল 'ওয়াই' স্থানাঙ্কের জন্য।
এটকনওয়ে

9
স্ক্রিন.প্রাইমারি স্ক্রিন কেন? ফর্মটি 'মাধ্যমিকস্ক্রিনে' থাকলে কী হবে? আপনার Screen screen = Screen.FromControl(this);এখানে ব্যবহার করা উচিত ।
আর্টেমিক্স

আমি এই আদিম কৌশলগুলি কেবলমাত্র NET কমপ্যাক্ট ফ্রেমওয়ার্ক 3.5 এ কাজ করে বলে ব্যবহার করি এবং আমি কেন ব্যবহার করি না Screen.FromControl(this)তবে এটি চালিয়ে যাচ্ছি তাও এটি ব্যাখ্যা করে PrimaryScreen। (আমি হার্ডওয়্যার সীমাবদ্ধতার অধীনে একটি অ্যাপ্লিকেশন বিকাশ করছি) :-)
ইয়েও

আপনি যদি কেবল একটি স্ক্রিন ব্যবহার করেন তবে এই পদ্ধতিটি ঠিক আছে। তবে, আপনার যদি একাধিক মনিটর থাকে এবং বাম মনিটরে এখানে একটি শর্টকাট ক্লিক করেন, আপনি সত্যিই এটি ডানদিকে খুলতে চান না। স্টার্টপজিশনের সম্পত্তিটি আপনার পক্ষে এটি পরিচালনা করে।
ট্রেভর_জি

এটি [প্রতি মনিটর ডিপিআই সচেতন] নয়।
ভিটি

28

উইন্ডোজ ফর্মগুলিতে:

this.StartPosition = FormStartPosition.CenterScreen;

ডব্লিউপিএফ:

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

 রানটাইমটিতে একটি ফর্ম কেন্দ্র করে

1. ফর্মের নীচের সম্পত্তিটি
   সেট করুন:
   -> স্টার্টপজেশন: সেন্টারস্ক্রিন -> উইন্ডোস্টেট: সাধারণ

এটি রানটাইমের সময় ফর্মটিকে কেন্দ্র করবে তবে ফর্মের আকারটি যদি প্রত্যাশিত হয় তবে দ্বিতীয় ধাপটি করুন।

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 () কল করবেন না Instead পরিবর্তে, স্টার্টপজেনের সম্পত্তিটি সেন্টারস্ক্রিনে সেট করুন" " msdn.microsoft.com/en-us/library/…
876

2

ফর্মের অবস্থানের সম্পত্তিটি ব্যবহার করুন। এটি পছন্দসই শীর্ষ বাম পয়েন্টে সেট করুন

পছন্দসই এক্স = (ডেস্কটপ_উইথ - ফর্ম_উইঠ) / 2

কাঙ্ক্ষিত y = (ডেস্কটপ_উত্তর - থেকে_ উচ্চতা) / 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);

সুতরাং আপনি খেয়াল করবেন যে আমি কেবল উচ্চতা / প্রস্থ ব্যবহার না করে "পছন্দসই আকার" ব্যবহার করছি। পছন্দসই আকার নিয়ন্ত্রণগুলি যুক্ত করার পরে ফর্মটির মান ধরে রাখবে। উচ্চতা / প্রস্থ যেখানে হবে না।

আশা করি এটি কাউকে সাহায্য করবে।

চিয়ার্স


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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.