2012-09-24 9 views
6

Używam TableLayoutPanel na przykład, jeśli mam 3 wiersze i 5 kolumn. Chcę narysować tylko zewnętrzną granicę dla całego panelu. Domyślnie panel udostępnia CellBorderStyle, który dodaje wszystkie boczne ramki do wszystkich dostępnych komórek. Czy istnieje sposób, w jaki możemy ustawić tylko granice zewnętrzne?Rysuj tylko zewnętrzną granicę dla komórek TableLayoutPanel

Podałem przykładowy kod poniżej.

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

Jest mało prawdopodobne, aby uzyskać dobre odpowiedzi, jeśli nie podasz więcej kontekstu. Czego już próbowałeś? –

+0

Yah, właśnie go oskarżyłem, ale dajmy mu szansę. – fernandoespinosa

Odpowiedz

5

Widzę, że jesteś bardzo nowym plakatem. Kodeks postępowania polega na tym, że naprawdę musisz pokazać, czego WYPRZEDZISZ, i wskazać problemy techniczne. Nie pytaj w ten sposób (szczególnie te, które sprawiają, że wyglądasz tak, jakbyś niczego nie próbował).

To powiedziawszy, próbując ci pomóc, lepiej sam pomaluj granicę komórek. To o czymś wzdłuż następujących linii, a następnie dostosować:

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

w czasie projektowania: At design-time

W czasie wykonywania: At runtime

+3

Nie ma takiego kodeksu postępowania. To jest strona z pytaniami i odpowiedziami. Ma to być baza wiedzy, która pomoże innym uniknąć marnowania czasu. Proszę wskazać mi FAQ, gdzie wspomina o twoim tak zwanym kodeksie postępowania. –

+0

nie zrozumcie tego źle. '' teraz, idąc trochę nie na temat, każdy może zadawać pytania, nawet z lenistwa i kiepsko wykonanego ... po prostu nie oczekuj zbyt dużego szacunku ... a tym bardziej odpowiedzi (którą dostał). entuzjazm kodu jest jedyną rzeczą, która jest tutaj godna szacunku. "' – fernandoespinosa

+0

Poszedłem i sprawdziłem historię edycji pytania. Teraz widzę, dlaczego nie byłeś zachwycony pierwotnym pytaniem. :-) –

2

sama TableLayOutPanel nie obsługuje nieruchomości na granicy z wyjątkiem CellBorderStyle który nie jest to, czego chcesz.

Proponuję umieścić swój TableLayOutPanel w panelu sterowania i ustawić właściwość Dock swojej TableLayOutPanel do wypełnienia.

następnie ustawić BorderStyle Panelu co chcesz (FixedSingle lub Fixed3D)

3

TableLayoutPanel ma w rzeczywistości obsługuje właściwości BorderStyle, która jest, co chcesz. Na przykład:

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

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

Jest ozdobiona:

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

Więc Intellisense nie pokaże ci to, ale to jest udokumentowane i to działa. Nie mam pojęcia, dlaczego nie można go przeglądać.

+0

Dziękuję za te informacje. To mało prawdopodobne proste rozwiązanie! –

Powiązane problemy