2012-09-24 9 views
6

Estoy utilizando el TableLayoutPanel, por ejemplo, si tengo 3 filas y 5 columnas. Quiero dibujar solo el borde exterior para todo el panel. De forma predeterminada, el panel proporciona CellBorderStyle, que agrega todos los bordes laterales a todas las celdas disponibles. ¿Hay alguna manera en que podamos establecer solo las fronteras exteriores?Dibuje solo el borde exterior para TableLayoutPanel Células

He proporcionado un código de muestra a continuación.

TableLayoutPanel tblPanel = new TableLayoutPanel; 
    tblPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; 
    Label lblName; 
    TextBox txtName; 
    Button btnAdd; 
    int colCnt = 0; 
    for(int rw =0; rw < 3; rw++) 
    { 
      lblName = new Label(); 
      lblName.Name = "mylabel" + rw.ToString(); 
      tblPanel.Controls.Add(lblName, colCnt, rw); 
      colCnt++; 

      txtName = new TextBox(); 
      txtName.Name = "mytext" + rw.ToString(); 
      tblPanel.Controls.Add(txtName, colCnt, rw); 
      colCnt++; 

      btnAdd = new Button(); 
      btnAdd.Name = "mybutton" + rw.ToString(); 
      tblPanel.Controls.Add(btnAdd, colCnt, rw); 

      colCnt = 0; 
    } 
+1

Es poco probable que obtenga buenas respuestas si no proporciona más contexto. ¿Qué has probado ya? –

+0

Yah, solo lo reprendí, pero demosle una oportunidad. – fernandoespinosa

Respuesta

5

Te veo que eres un póster muy nuevo. El código de conducta aquí es que se supone que debes mostrar lo que TÚ has intentado y señalar problemas técnicos. No solo haga preguntas de esa manera (especialmente las que le hagan parecer que ni siquiera ha intentado nada).

Dicho esto, e intentando ayudarte, sería mejor que pintaras tú mismo el borde de la celda. Esto, por algo a lo largo de las siguientes líneas, a continuación, modifique para requisitos:

public TableForm() { 
     InitializeComponent(); 
     this.tableLayoutPanel.CellPaint += tableLayoutPanel_CellPaint; 
    } 

    private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) { 
     e.Graphics.DrawLine(Pens.Black, e.CellBounds.Location, new Point(e.CellBounds.Right, e.CellBounds.Top)); 
    } 

En tiempo de diseño: At design-time

En tiempo de ejecución: At runtime

+3

No existe tal código de conducta. Este es un sitio de preguntas y respuestas. Se pretende que sea una base de conocimiento de información que pueda ayudar a otros a evitar perder el tiempo. Indíqueme las preguntas frecuentes en las que menciona su llamado código de conducta. –

+0

no se equivoque. '' ahora, yendo un poco fuera del tema, cualquiera puede hacer preguntas, incluso por pereza y mal elaborados ... simplemente no espere obtener demasiado respeto ... y mucho menos una respuesta (que obtuvo). el entusiasmo del código es lo único que es respetable aquí. ' – fernandoespinosa

+0

Fui y revisé el historial de edición de la pregunta. Ahora veo por qué no estabas emocionado con la pregunta original. :-) –

2

TableLayoutPanel en sí no admite una propiedad para la frontera, excepto CellBorderStyle cuales no es lo que quieres

Le sugiero que ponga su TableLayOutPanel en un control Panel y configure la propiedad Dock de su TableLayOutPanel en Fill.

después fijar los EstiloDeLosBordes del panel a lo que quiere (o FixedSingle Fixed3D)

3

TableLayoutPanel de hecho admite la propiedad BorderStyle, que es lo que desea. Por ejemplo:

tableLayoutPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 

https://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.borderstyle(v=vs.110).aspx

Está decorado con:

[Browsable(false)] 
[EditorBrowsable(EditorBrowsableState.Never)] 

Así Intellisense no va a mostrar a usted, pero está documentado y funciona. No tengo idea de por qué no se puede navegar.

+0

Gracias por esta información. ¡Esa es una solución simple poco probable! –

Cuestiones relacionadas