मैं WinForms में केंद्रित लेबल को कैसे रखूँ?


137

में WinFormsमैं Labelसफलता, असफलता आदि जैसे विभिन्न संदेशों को प्रदर्शित करने के लिए एक का उपयोग कर रहा हूँ ।

मैं उस लेबल को केंद्र रूप में रखना चाहूंगा। मैं एक समाधान चाहता हूं जो इसे केंद्रित रखेगा कि क्या लेबल में सिर्फ एक शब्द या एक पूरा वाक्य है।

जवाबों:


281

सेट Labelकी AutoSizeसंपत्ति के लिए False, TextAlignसंपत्ति के लिए MiddleCenterऔर Dockसंपत्ति के लिए Fill


धन्यवाद चक्रवात, यह काम किया। क्या आप डॉक क्या कर सकते हैं?
हंसी

3
साथ Control.Dockसंपत्ति ( msdn.microsoft.com/en-us/library/... ), आप डॉक कर सकते हैं (छड़ी) कंटेनर की एक निश्चित ओर करने के लिए एक नियंत्रण। उदाहरण के लिए Left, Top, Rightया BottomFillनियंत्रण को कंटेनर में सभी उपलब्ध स्थान लेने के लिए कहता है।
डिकॉय चक्रवात

1
जब तक आप लेबल को उसके लिए उपलब्ध पूरे स्थान को भरने के लिए नहीं चाहते हैं, तब तक आप उसके / उसके प्रोग्रामेटिक समाधान में user3866622 द्वारा सुझाई गई डॉक संपत्ति को "कोई नहीं" सेट करना चाह सकते हैं।
टिम अप

3
काम किया, लेकिन मुझे Dockसेटिंग में कुछ भी करने की आवश्यकता नहीं थी ।
जिम फेल

4
Dockसेटिंग अनावश्यक थी। AutoSizeसंपत्ति को बदलने से लेबल को एक सीमा बॉक्स मिलता है जिसे आप मैन्युअल रूप से समायोजित कर सकते हैं।
निक रॉबर्ट्स

13

प्रोग्राम की स्थापना के लिए कुछ मामूली अतिरिक्त सामग्री:

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

डॉकस्टाइल और सामग्री संरेखण आपकी आवश्यकताओं से भिन्न हो सकते हैं। उदाहरण के लिए, wpf फॉर्म पर एक साधारण लेबल के लिए मैं DockStyle.None का उपयोग करता हूं।



10

यदि आप पूरे उपलब्ध क्षेत्र में लेबल को डॉक नहीं करना चाहते हैं, तो TextChanged के बजाय SizeChanged इवेंट सेट करें। प्रत्येक पत्र को बदलने पर लेबल की चौड़ाई संपत्ति के साथ-साथ उसके पाठ को भी बदल देगा जब संपत्ति को ट्रू पर सेट किया जाता है। तो, वैसे आप लेबल को फॉर्म में केंद्रित रखने के लिए किसी भी फॉर्मूले का उपयोग कर सकते हैं।

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

मैं ऐसा ही कुछ करना चाहता था, लेकिन एक पृष्ठभूमि छवि के साथ एक रूप में, मैंने पाया कि जब लेबल में पाठ ने इस विधि के साथ repaints स्पष्ट थे, तो मैंने निम्नलिखित किया: * लेबल को सेट करें AutoSize को सही और TextAlign करने के लिए 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;
}

यह वास्तव में केंद्र है

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.