2015-09-05 22 views
6

Fondamentalmente sto affrontando un problema con la rimozione del padding/margine tra i controlli in un tablelayoutpanel.C# tablelayoutpanel impossibile rimuovere padding/margin

Ho impostato il margine tablelayoutpanel e il padding su 0. Cellborderstyle è nessuno.

I controlli aggiunti sono tutti impostati su 0 per margine e riempimento.

Eppure quel misterioso margine continua ad apparire. Qualsiasi aiuto?

Provato questo 2 soluzioni qui e varie altre sul web, ma nessuno potrebbe rimuovere quella spaziatura in mezzo.

Running on VS2010, .net 4,5

Form1.cs

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Multiply { 
    public partial class Form1 : Form { 
     public Form1() { 
      InitializeComponent(); 
      LoadBoard(10, 10); 
     } 

    private void LoadBoard(int col, int row) { 
     board.ColumnCount = col; 
     board.RowCount = row; 
     board.BorderStyle = BorderStyle.FixedSingle; 

     float colSize = 100f/col; 
     float rowSize = 100f/row; 

     board.ColumnStyles[0].SizeType = SizeType.Percent; 
     board.ColumnStyles[0].Width = colSize; 
     board.RowStyles[0].SizeType = SizeType.Percent; 
     board.RowStyles[0].Height = rowSize; 


     for (int x = 0; x < col; x++) 
      board.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, colSize)); 

     for (int x = 0; x < row; x++) { 
      board.RowStyles.Add(new RowStyle(SizeType.Percent, rowSize)); 
      for (int y = 0; y < col; y++) { 
       board.Controls.Add(CreateButton(x + "," + y), y, x); 
      } 
      Console.WriteLine(x); 
     } 

    } 

    private Button CreateButton(string text) { 
     Button a = new Button(); 
     a.Text = text; 
     a.Dock = DockStyle.Fill; 
     a.Margin = new Padding(0); 
     a.Padding = new Padding(0); 
     return a; 
    } 
} 
} 

Desi GNER

namespace Multiply { 
    partial class Form1 { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) { 
      if (disposing && (components != null)) { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Windows Form Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() { 
      this.board = new System.Windows.Forms.TableLayoutPanel(); 
      this.SuspendLayout(); 
      // 
      // board 
      // 
      this.board.ColumnCount = 1; 
      this.board.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); 
      this.board.Dock = System.Windows.Forms.DockStyle.Top; 
      this.board.Location = new System.Drawing.Point(0, 0); 
      this.board.Margin = new System.Windows.Forms.Padding(0); 
      this.board.Name = "board"; 
      this.board.RowCount = 1; 
      this.board.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 
      this.board.Size = new System.Drawing.Size(368, 223); 
      this.board.TabIndex = 0; 
      // 
      // Form1 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(368, 391); 
      this.Controls.Add(this.board); 
      this.Name = "Form1"; 
      this.Text = "Form1"; 
      this.ResumeLayout(false); 

     } 

     #endregion 

     private System.Windows.Forms.TableLayoutPanel board; 
    } 
} 

risposta

3

state inseguendo il problema sbagliato, questo divario è causato dal controllo Button, non il TableLayoutPanel. Qualcosa che puoi vedere chiaramente quando lasci un pulsante sul modulo con il designer, nota lo spazio tra il rettangolo di selezione e la superficie del pulsante.

Avrai bisogno di armeggiare con il pulsante per sbarazzartene o utilizzare un diverso tipo di controllo. Il modo più semplice è quello di renderla piatta:

private Control CreateButton(string text) { 
     var a = new Button(); 
     a.FlatStyle = FlatStyle.Flat; 
     a.FlatAppearance.BorderSize = 0; // optional 
     // etc... 
    } 

rimuovere l'assegnazione BorderSize se volete vedere una griglia.

+0

Grazie! Questo ha funzionato bene. – Tim

0

Ho affrontato lo stesso problema durante l'utilizzo di differenti controlli in TableLayoutPanel

È possibile farlo

  1. Vai alla visualizzazione
  2. Clicca sulle proprietà
  3. Colonne GoTo, quando si fa clic su testo casella accanto a Colonne, un pulsante (...) viene visualizzato all'estrema destra nella casella di testo, fare clic su di esso
  4. Viene visualizzata una finestra pop-up, selezionare AutoSize (invece di Assoluto o percentuale).
  5. Nella stessa finestra in Show: selezionare Rows e selezionare nuovamente Autosize.
  6. Fare clic OK e il gioco è fatto.
Problemi correlati