আমি কীভাবে উইনফোর্মে কেন্দ্রীভূত একটি লেবেল রাখব?


137

ইন WinFormsআমি একটি ব্যবহার করছি Labelসাফল্য, ব্যর্থতা ইত্যাদি বিভিন্ন বার্তা প্রদর্শনের জন্য

আমি সেই লেবেলটি কেন্দ্রের ফর্মের মধ্যে রাখতে চাই। আমি এমন একটি সমাধান চাই যা লেবেলে কেবল একটি শব্দ বা একটি সম্পূর্ণ বাক্য থাকুক না কেন এটি কেন্দ্রিক রাখবে।

উত্তর:


281

সেট Labelএর AutoSizeসম্পত্তির False, TextAlignসম্পত্তিতে MiddleCenterএবং Dockসম্পত্তিতে Fill


ধন্যবাদ ডাইক্লোন, এটি কাজ করেছিল। আপনি কি প্লজকে গাইড করতে পারেন গাইড করতে পারেন?
হানসি

3
সঙ্গে Control.Dockসম্পত্তি ( msdn.microsoft.com/en-us/library/... ), আপনি ডক করতে পারেন (লাঠি) ধারক একটি নির্দিষ্ট দিকে একটি নিয়ন্ত্রণ। উদাহরণ হিসেবে বলা যায় Left, Top, Rightবা BottomFillকনটেইনারটিতে সমস্ত উপলব্ধ স্থান নিতে নিয়ন্ত্রণকে বলে tells
ডেস্কলোন

1
আপনি যতক্ষণ না লেবেলটি সম্পূর্ণ স্থানটি পূরণ করতে চান, আপনি ডক সম্পত্তিটিকে তার / তার প্রোগ্রামিক সমাধানে 38386622 দ্বারা প্রস্তাবিত "কিছুই নয়" তে সেট করতে চাইতে পারেন।
টিম

3
কাজ করেছেন, তবে Dockসেটিংয়ে আমার কিছু করার দরকার নেই ।
জিম ফেল

4
Dockসেটিং অপ্রয়োজনীয় ছিল। AutoSizeসম্পত্তি পরিবর্তন করলে লেবেলটিকে একটি বাউন্ডিং বাক্স দেওয়া হয় যা আপনি ম্যানুয়ালি এর আকার সামঞ্জস্য করতে পারেন।
নিক রবার্টস

13

প্রোগ্রামগতভাবে সেট করার জন্য কিছু ছোট ছোট অতিরিক্ত সামগ্রী:

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

ডকস্টাইল এবং সামগ্রীর প্রান্তিককরণ আপনার প্রয়োজন থেকে পৃথক হতে পারে। উদাহরণস্বরূপ, ডাব্লুপিএফ ফর্মের একটি সাধারণ লেবেলের জন্য আমি ডকস্টাইল.নোন ব্যবহার করি।



10

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

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}

2

গৃহীত উত্তর দুটি কারণে আমার পক্ষে কার্যকর হয়নি:

  1. আমি এত BackColorসেট করে রেখেছি AutoSize = falseএবং Dock = Fillপুরো ফর্মটি পূরণ করার জন্য পটভূমির রঙের কারণ ঘটায়
  2. আমি AutoSizeযাই হোক না কেন মিথ্যাতে সেট করতে পারিনি কারণ আমার লেবেল পাঠ্যটি গতিশীল ছিল

পরিবর্তে, আমি বাম অফসেট গণনা করার জন্য কেবল ফর্মটির প্রস্থ এবং লেবেলের প্রস্থ ব্যবহার করেছি:

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

1

আমি অনুরূপ কিছু করতে চেয়েছিলাম, তবে একটি পটভূমির চিত্রযুক্ত ফর্মটিতে, আমি দেখতে পেলাম যে যখন লেবেলের পাঠ্যটি পরিবর্তন করা হয়েছিল তখন এই পদ্ধতির মাধ্যমে স্পষ্ট ছিল, তাই আমি নিম্নলিখিতটি করলাম: * লেবেলটিকে স্বতঃসীমানকে সত্যতে সেট করুন এবং টেক্সটএলাইন্ট করুন MiddleCenter

তারপরে, প্রতিবার পাঠ্য পরিবর্তন হয়েছে (টাইমার ব্যবহার করে আমার কাজ করা হয়েছিল) আমি নিম্নলিখিত পদ্ধতিটি কল করেছি:

    private Point GetPosition()
    {
        int y = (this.Height / 2) - (label1.Height / 2);
        int x = (this.Width / 2) - (label1.Width / 2);
        return new Point(x, y);
    }

এবং এই রিটার্ন মানটিতে লেবেলের অবস্থানের সম্পত্তিটি সেট করুন। এটি নিশ্চিত করে যে পাঠ্যটি পরিবর্তিত হলে এবং লেবেলটি সর্বদা ফর্মের কেন্দ্রে থাকে এবং পূর্ণ-স্ক্রিন ফর্মের জন্য পুনরায় রঙগুলি স্পষ্ট না থাকে।


1

আপনি নিম্নলিখিত কোড স্নিপেট চেষ্টা করে দেখতে পারেন:

private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
    Point center = new Point( 
        MenuPanel.Size.Width / 2 - control.Width * 2,
        height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);

    return center;
}

এটি সত্যই কেন্দ্র

এখানে চিত্র বর্ণনা লিখুন

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