我有一个包含许多小面板的 Panel .
包含面板的 AutoScroll 设置为true,这样当有太多小面板时我可以向下滚动 .
小面板的宽度始终设置为容器的客户端宽度(允许边框等),因此不应显示水平滚动条 .
这似乎主要是这种情况,除非最后一个子面板触摸包含面板的底部,然后水平滚动条出现,当我不想要它!
将下面的代码粘贴到新的Winform中并尝试以下步骤:
按下'Add'按钮4次以获得4个面板,它们应该从容器底部移开 .
垂直调整表单大小,以便在最后一个面板后面有一些空格 .
现在小心地垂直调整表格大小,使最后一个面板的底部接触容器的底部 . 滚动条应该出现在这里,可能需要一些“摆动” .
static List listOfPanels;
static Panel panel;
static bool flipflop;
private void Form1_Load(object sender, EventArgs e)
{
Height = 400;
Width = 400;
listOfPanels = new List();
panel = new Panel()
{
Height = this.ClientSize.Height - 20,
Width = 200,
Top = 10,
Left = 10,
BackColor = Color.White,
BorderStyle = BorderStyle.FixedSingle,
Padding = Padding.Empty,
Margin = Padding.Empty,
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom,
};
// I'VE TRIED DISABLING IT HERE!
panel.AutoScroll = false;
panel.HorizontalScroll.Enabled = false;
panel.HorizontalScroll.Visible = false;
panel.AutoScroll = true;
panel.Resize += panel_Resize;
Button button = new Button()
{
Text = @"Add",
Size = new Size(100, 50),
Top = 10,
Left = 20 + panel.Width
};
button.Click += button_Click;
Controls.Add(panel);
Controls.Add(button);
}
void panel_Resize(object sender, EventArgs e)
{
renderSubPanels();
}
void button_Click(object sender, EventArgs e)
{
Panel subPanel = new Panel()
{
Height = 100,
BackColor = flipflop ? Color.PeachPuff : Color.PowderBlue,
Top = (listOfPanels.Count * 100) - Math.Abs(panel.AutoScrollPosition.Y)
};
listOfPanels.Add(subPanel);
flipflop = !flipflop;
panel.Controls.Add(subPanel);
renderSubPanels();
}
void renderSubPanels()
{
panel.SuspendLayout();
bool verticalScrollVisible = listOfPanels.Count * 100 > panel.ClientSize.Height;
foreach (Panel p in listOfPanels)
{
if (verticalScrollVisible)
{
p.Width = panel.Width - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth - 2;
}
else
{
p.Width = panel.Width - 2;
}
p.Top = (listOfPanels.IndexOf(p) * 100) - Math.Abs(this.AutoScrollPosition.Y);
}
panel.ResumeLayout();
}
在我的真实计划中,它与我合作,因此我对创意持开放态度 . 我只想让讨厌的东西消失!
谢谢!