जवाबों:
सेट Label
की AutoSize
संपत्ति के लिए False
, TextAlign
संपत्ति के लिए MiddleCenter
और Dock
संपत्ति के लिए Fill
।
Control.Dock
संपत्ति ( msdn.microsoft.com/en-us/library/... ), आप डॉक कर सकते हैं (छड़ी) कंटेनर की एक निश्चित ओर करने के लिए एक नियंत्रण। उदाहरण के लिए Left
, Top
, Right
या Bottom
। Fill
नियंत्रण को कंटेनर में सभी उपलब्ध स्थान लेने के लिए कहता है।
Dock
सेटिंग में कुछ भी करने की आवश्यकता नहीं थी ।
Dock
सेटिंग अनावश्यक थी। AutoSize
संपत्ति को बदलने से लेबल को एक सीमा बॉक्स मिलता है जिसे आप मैन्युअल रूप से समायोजित कर सकते हैं।
प्रोग्राम की स्थापना के लिए कुछ मामूली अतिरिक्त सामग्री:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
डॉकस्टाइल और सामग्री संरेखण आपकी आवश्यकताओं से भिन्न हो सकते हैं। उदाहरण के लिए, wpf फॉर्म पर एक साधारण लेबल के लिए मैं DockStyle.None का उपयोग करता हूं।
आप संपत्ति लंगर की स्थापना के साथ इसे प्राप्त करेंगे: कोई नहीं।
यदि आप पूरे उपलब्ध क्षेत्र में लेबल को डॉक नहीं करना चाहते हैं, तो TextChanged के बजाय SizeChanged इवेंट सेट करें। प्रत्येक पत्र को बदलने पर लेबल की चौड़ाई संपत्ति के साथ-साथ उसके पाठ को भी बदल देगा जब संपत्ति को ट्रू पर सेट किया जाता है। तो, वैसे आप लेबल को फॉर्म में केंद्रित रखने के लिए किसी भी फॉर्मूले का उपयोग कर सकते हैं।
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
स्वीकृत उत्तर मेरे लिए दो कारणों से काम नहीं आया:
BackColor
इतनी सेटिंग की थी AutoSize = false
और Dock = Fill
पृष्ठभूमि का रंग पूरे फॉर्म को भरने का कारण बनता हैAutoSize
वैसे भी झूठ नहीं बोल सकता था क्योंकि मेरा लेबल पाठ गतिशील थाइसके बजाय, मैंने केवल बाईं ऑफ़सेट की गणना करने के लिए फ़ॉर्म की चौड़ाई और लेबल की चौड़ाई का उपयोग किया:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
मैं ऐसा ही कुछ करना चाहता था, लेकिन एक पृष्ठभूमि छवि के साथ एक रूप में, मैंने पाया कि जब लेबल में पाठ ने इस विधि के साथ 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);
}
और लेबल के स्थान गुण को इस रिटर्न मान पर सेट करें। यह सुनिश्चित करता है कि लेबल हमेशा उस रूप के केंद्र में होता है जब पाठ परिवर्तित होता है और पूर्ण-स्क्रीन फ़ॉर्म के लिए पुन: प्रिंट स्पष्ट नहीं होते थे।
आप निम्नलिखित कोड स्निपेट आज़मा सकते हैं:
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;
}
यह वास्तव में केंद्र है