2016-04-05 2 views
1

Ich möchte in einem TableLayoutPanel blättern können, wenn der Gehalt höher als die Platte bekommt selbst.
ich versucht habe:vertikal ScrollBar in Table

  • Set AutoScroll zu true (Addiert unnecessary horizontal scrollbar)
  • Zusätzlich Padding auf der rechten Seite geben Sie den horizontalen Scrollbalken erscheinen (lässt einen üblen Lücke zwischen Inhalt und Scrollbar)
  • Satz zu verhindern AutoScroll-false und VerticalScroll.Visible zu true (ignoriert der Scrollbar, wenn der Inhalt wächst und erlauben dem Benutzer nicht gescrollt werden)

Wie kann ich eine angenehme vertikale Bildlaufleiste ohne böse Nebenwirkungen erhalten?


einige runnable Code zu spielen:

public class FormTLPTest : Form 
{ 
    TableLayoutPanel tlp; 

    public FormTLPTest() 
    { 
     Height = 800; 
     Width = 800; 

     tlp = new TableLayoutPanel(); 
     tlp.Dock = DockStyle.Fill; 
     tlp.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; 
     //tlp.AutoScroll = true; //adds horizontal ScrollBar 
     //tlp.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0); //prevents horizontal ScrollBar but adds nasty gap 
     tlp.VerticalScroll.Visible = true; 
     tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100.0F)); 

     Controls.Add(tlp); 

     tlp.Click += Tlp_Click; 

     Add10Lines(); 
    } 

    private void Tlp_Click(object sender, System.EventArgs e) 
    { 
     Add10Lines(); 
    } 

    private void Add10Lines() 
    { 
     tlp.SuspendLayout(); 

     for (int i = 0; i < 10; i++) 
     { 
      Label lb2 = new Label(); 
      lb2.Margin = new Padding(); 
      lb2.Dock = DockStyle.Fill; 
      lb2.BackColor = Color.White; 
      lb2.Text = "Some longer Text - it contains information. Don't know what I should write to fill the space"; 

      lb2.Click += Tlp_Click; 

      tlp.Controls.Add(lb2, 0, i); 
     } 

     tlp.ResumeLayout(); 
    } 
} 

Antwort

1

Der Code, den Sie für mich auf dem Laufenden Werke, stellen nur Autoscroll auf true und dann tlp.HorizontalScroll.Visible = false;

EDIT: bemerkt einfach die horizontale Leiste Wie auch immer, meine Entschließung hat es versteckt. Wie auch immer, setze den Autoscroll auf "False", dann füge tlp.AutoScroll = true; nach tlp.ResumeLayout(); in Add10Lines() Methode hinzu.

+0

die Beratung im Bearbeitungs auch die horizontalen Scrollbar – Breeze

+0

[link] (http://imgur.com/iGSGshM) der Enabled Teil nicht verstecken tut nicht so. Seltsam, die Bar zeigt für einen Moment, dann ist es nicht sichtbar. – Vegz

+0

Awsome! Ich vermisste immer noch, die vertikale Bildlaufleiste sichtbar zu machen – Breeze

0

Warum nicht Sie versuchen, die Höhe des HorizontalScroll etwas größer als der Behälter einzustellen.

, was ich sagen möchte, ist, dass, wenn die Höhe des Table 300 die Höhe der Scroll machen ist 350.

Versuchen Sie, die Höhe der Scroll hinzufügen, die größer ist als Table Höhe sein sollte

0

Sie verwenden die folgenden Zeile in Ihrem Code, und weil es Sie nicht eine vertikale Bildlaufleiste immer:

tlp.Dock = DockStyle.Fill; 

Anstelle der Verwendung von dass, versuchen, die unterhalb der Linie, die für Sie arbeiten kann:

tlp.Dock = DockStyle.Top;