2011-11-03 13 views
9

मैंने इस पर कुछ लेख पढ़े हैं लेकिन कोई भी मदद नहीं कर रहा है।मैं tableLayoutPanel में टेक्स्टबॉक्स और लेबल को कैसे संरेखित करूं?

Using frm As New frmWithTableLayout 
    frm.TableLayoutPanel1.ColumnCount = 2 
    frm.TableLayoutPanel1.RowCount = 3 

    'create report Type' 
    Dim lblReportType As New Label 
    lblReportType.Text = "Report Type" 
    lblReportType.Dock = DockStyle.Right 
    Dim reportType As New System.Windows.Forms.TextBox() 
    reportType.Text = "Income" 
    frm.TableLayoutPanel1.Controls.Add(lblReportType, 0, 0) 
    frm.TableLayoutPanel1.Controls.Add(reportType, 1, 0) 
End Using 
+1

@Bradley वहाँ सी # टैग निकालने में कोई कारण नहीं है। यह एक भाषा-विशिष्ट प्रश्न नहीं है और सिर्फ इसलिए कि मेरा उदाहरण VB.NET में था, यह इसे VB.NET प्रश्न नहीं बनाता है। मैं सभी भाषाओं के लिए खुला हूं, फिलहाल मैं वीबीएनईटी में प्रोग्रामिंग कर रहा था इसलिए उदाहरण VB.NET में एक साथ रखना आसान था।कोई भी जो सी # में प्रोग्राम समस्या के समाधान के साथ आ सकता है ... – Denis

+0

आप कॉलम स्टाइल जोड़ने के लिए भूल गए हैं। डिजाइनर के साथ पहले नमूना रूप पर ऐसा करें। समाधान एक्सप्लोरर विंडो में सभी फ़ाइलें दिखाएँ आइकन पर क्लिक करें। फॉर्म के बगल में नोड खोलें और Designer.vb फ़ाइल को डबल-क्लिक करें। डिजाइनर उत्पन्न कोड को देखें। –

+0

@ डेनिस मैं केवल इसे एक .net टैग बनाउंगा, क्योंकि आपने F # और अन्य .NET आधारित भाषाओं को छोड़ दिया था। –

उत्तर

1

के साथ ऊपर की जगह:

Public Sub LayoutControl(ByVal c As Control, ByVal column As Integer, ByVal row As Integer) 
     If TypeOf c Is Label Then 
      Dim clabel As Label = DirectCast(c, Label) 
      clabel.TextAlign = ContentAlignment.TopCenter 
      clabel.Dock = DockStyle.Right 
      clabel.Margin = New Padding(clabel.Margin.Left, clabel.Margin.Top + 5, clabel.Margin.Right, clabel.Margin.Bottom) 

     ElseIf TypeOf c Is System.Windows.Forms.TextBox Then 
      Dim ctbox As System.Windows.Forms.TextBox = DirectCast(c, System.Windows.Forms.TextBox) 
      ctbox.Margin = New Padding(0, 3, 0, 3) 
      ctbox.TextAlign = HorizontalAlignment.Center 
     End If 

     TableLayoutPanel1.Controls.Add(c, column, row) 
    End Sub 

    Public Sub SetupTableLayout(ByVal numOfColumns As Integer, ByVal numOfRows As Integer) 
     TableLayoutPanel1.ColumnCount = numOfColumns 
     TableLayoutPanel1.RowCount = numOfRows 
     While TableLayoutPanel1.RowStyles.Count < TableLayoutPanel1.RowCount 
      TableLayoutPanel1.RowStyles.Add(New RowStyle()) 
     End While 

     For Each row As RowStyle In TableLayoutPanel1.RowStyles 
      With row 
       .SizeType = SizeType.Percent 
       .Height = 100/TableLayoutPanel1.RowCount 
      End With 
     Next row 
    End Sub 
7

आप Anchor और Dock गुणों के साथ एक TableLayoutPanel में संरेखित और खिंचाव नियंत्रण कर सकते हैं: मैं लेबल और निम्न मामले में पाठ बॉक्स कैसे संरेखित है।

lblReportType.TextAlign = ContentAlignment.MiddleCenter 
+0

मैंने कोशिश की, (ऊपर देखें)। कोई किस्मत – Denis

+1

@ डेनिस टेक्स्ट आज़माएं – Damith

+0

कोशिश की गई टेक्स्टलाइन, कोई भाग्य नहीं है ... ऐसा जगह हैक है जो इसे बहुत अच्छी तरह से कर रहा है लेकिन अच्छी तरह से, यह कुल हैक है ... – Denis

11

लेबल और:

Using frm As New frmWithTableLayout 
      frm.SetupTableLayout(2, 3) 

      'create report Type' 
      Dim lblReportType As New Label 
      lblReportType.Text = "Report Type" 
      frm.LayoutControl(lblReportType, 0, 0) 
      Dim tbReportType As New System.Windows.Forms.TextBox() 
      tbReportType.Text = "Income" 
      frm.LayoutControl(tbReportType, 1, 0) 

      frm.ShowDialog() 
    End Using 

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

MSDN से:

बदलें वाम करने के लिए बटन नियंत्रण के एंकर संपत्ति का मूल्य। बटन नियंत्रण सेल की बाएं सीमा के साथ संरेखित करने के लिए चला जाता है।

नोट: यह व्यवहार अन्य कंटेनर नियंत्रणों के व्यवहार से अलग है। अन्य कंटेनर नियंत्रणों में, एंकर संपत्ति सेट होने पर बच्चे का नियंत्रण नहीं चलता है, और एंकर संपत्ति सेट होने पर लंगर नियंत्रण और अभिभावक कंटेनर की सीमा के बीच की दूरी तय की जाती है।

https://msdn.microsoft.com/en-us/library/ms171691%28v=vs.90%29.aspx

0

इसमें दृष्टिकोण के लिए कुछ तरीके हैं, लेकिन यह कर इस तरह से मतलब है कि आप डिजाइन समय में परिवर्तन प्राप्त (कोड को चलाने के लिए तो कोई ज़रूरत नहीं है कि यह कैसे दिखेगा देखने के लिए), और यह पूर्वव्यापी प्रभाव से होगा नियंत्रण-दर-नियंत्रण आधार पर प्रत्येक Label पर TextAlignment और Anchor गुणों को ठीक करने की आवश्यकता के बिना अपने सभी मौजूदा लेआउट को सही करें।

1)

public class TableLayoutPanelEx : TableLayoutPanel 
{ 
    public TableLayoutPanelEx() 
    { 
     ControlAdded += OnControlAdded;    
    } 

    private void OnControlAdded(object sender, ControlEventArgs args) 
    { 
     var control = args.Control as Label; 
     if (control != null) { 
      control.TextAlign = ContentAlignment.MiddleLeft;     
      control.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left); 
     }    
    } 
} 

2) परियोजना चौड़ा खोज/new TableLayoutPanelEx( साथ new TableLayoutPanel( बदलें।

3)?

4) लाभ

से पहले:enter image description here

के बाद:enter image description here

संबंधित मुद्दे