2012-09-24 19 views
6

Ich verwende das TableLayoutPanel zum Beispiel, wenn ich 3 Zeilen und 5 Spalten habe. Ich möchte nur die äußere Grenze für das gesamte Panel zeichnen. Standardmäßig stellt das Panel CellBorderStyle zur Verfügung, das alle verfügbaren Seitengrenzen zu allen verfügbaren Zellen hinzufügt. Gibt es eine Möglichkeit, wo wir nur außerhalb der Grenzen stehen können?Draw only border für TableLayoutPanel Zellen

Ich habe unten einen Beispielcode zur Verfügung gestellt.

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

Sie werden wahrscheinlich keine guten Antworten erhalten, wenn Sie nicht mehr Kontext bereitstellen. Was hast du schon versucht? –

+0

Yah, ich habe ihn nur beschimpft, aber geben wir ihm eine Chance. – fernandoespinosa

Antwort

5

Ich sehe, Sie sind ein sehr neues Poster. Der Verhaltenskodex hier ist, dass Sie wirklich zeigen sollten, was SIE versucht haben, und technische Probleme ausfindig zu machen. Nein, frag nur so Fragen (besonders solche, die dich so aussehen lassen, als hättest du noch gar nichts probiert).

Das heißt, und versuchen, Ihnen zu helfen, wäre es besser, die Zellgrenze selbst zu malen. Das von etwas entlang der folgenden Zeilen, dann anpassen:

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)); 
    } 

Zur Design-Zeit: At design-time

Zur Laufzeit: At runtime

+3

Es gibt keinen solchen Verhaltenskodex. Dies ist eine Frage-und-Antwort-Website. Es soll eine Wissensbasis von Informationen sein, die anderen helfen können, Zeit zu verschwenden. Bitte weisen Sie mich auf die FAQ hin, in der Ihr so ​​genannter Verhaltenskodex erwähnt wird. –

+0

nicht falsch verstehen. '' jetzt, ein bisschen off-topic, jeder kann Fragen stellen, auch aus Faulheit und schlecht in Handarbeit ... nur nicht erwarten, zu viel Respekt zu bekommen ... viel weniger eine Antwort (die er bekam.) Code Begeisterung ist das einzige, was hier respektabel ist. ' – fernandoespinosa

+0

Ich ging und checkte die Bearbeitungsgeschichte der Frage aus. Jetzt verstehe ich, warum Sie von der ursprünglichen Frage nicht begeistert waren. :-) –

2

Table selbst keine Eigenschaft für die Grenz außer CellBorderStyle unterstützt die ist nicht was du willst.

Ich empfehle Ihnen, Ihr TableLayOutPanel in ein Panel-Steuerelement zu setzen und die Dock-Eigenschaft Ihres TableLayOutPanel auf Fill zu setzen.

Dann Set Border Panel, was Sie wollen (FixedSingle oder Fixed3D)

3

Table ist in der Tat unterstützen die Borderstyle-Eigenschaft, das ist, was Sie wollen. Zum Beispiel:

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

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

Es ist dekoriert mit:

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

So Intellisense wird es Ihnen nicht zeigen, aber es ist dokumentiert und es funktioniert. Ich habe keinen Einblick, warum es nicht durchsuchbar ist.

+0

Vielen Dank für diese Information. Das ist eine unwahrscheinlich einfache Lösung! –